Start, Complete and End are Spine.AnimationState events, used by the SkeletonAnimation
class.
SkeletonAnimator
is different; it doesn't use Spine.AnimationState at all. It currently uses Unity's SendMessage API and not Spine-C#'s C# events. I don't think you even get Start/End/Complete with SkeletonAnimator.
When using either SkeletonAnimation or SkeletonAnimator, weird things happen inside the duration of a mixing/crossfading transition if you are using that. Some events don't fire in a consistent or expected manner. This applies to all runtimes. It is most likely that Events from the previous animation are ignored. Using SkeletonAnimator/the Unity API events are much more confusing. It's not Spine's fault. Unity's Animation system's event firing is faulty and unpredictable.
I notice that End actually doesn't fire after each loop though. Thanks for reporting this.
As for whether or not this is "intended" behavior, that's really up to Nate (or up to you if you want to modify the code to suit your needs). Complete and End are pretty ambiguously similar terms.
If you need need help editing the code for events for your purposes, just try to describe it in this post and we'll try to see what should be done.