'System wait' is causing me trouble. Whenever the wait is started I can't interrupt it immediately to stop it from doing the next action. If I have conditions that are supposed to stop them, and they overlap quickly when conditions are met, there seems to be a residual effect still in action due to the 'system wait'.

Using separate events.First you toggle the boolean instead of the wait, then while the bool is true run a timer. When the timer runs down toggle another boolean. If you want to cancel the event, just change the variable.The timer behavior would simplify that a little.