Events fire if they should have been fired in the time between the last frame and current frame being drawn. This is encase the frame with the event on is skipped.
Events imo have this bug: Events dont fire on final frame? (b)
so if you play idle once (and have an event on the last frame) and play a animation on the same track with a 10 second delay, your event will fire every frame until new animation starts. I am unsure if AnimComplete will also behave like this, but wouldn't be surprised if it did.
To get around ^ this you could just make a manual time in your code and SetAnimation
when your timer hits its limit.
If you are looping your idle, I believe spine has an event called AnimationEnd which will get called at the end of each loop. (this is from memory, cant quite remember)