That's true. It is difficult to think some of these problems through. The event based nature of c2 is like concurrent programming in other languages and not easy to get your head around.
The thing I took away from working on your capx is to separate the changing of state variables from everything else. So set state variables in one event and act on those states in separate events. I can't help thinking that using Groups and enabling/disabling them to enable or disable certain events might work here. I'm looking into using that technique more myself. The are also state machine plugins which might be useful to you.