I discovered what was wrong. The TimedRepeater task resets when the repeater should end in the "OnReset" function. However that function is never called, so the endTime is never changed to Time.time+duration. I didn't want to go into the nuts and bolts of why that wasn't getting called so I put in a statement in the CanExecute function "if(endTime == 0){endTime = TIme.time + duration}" and then I set it back to 0 in the onFinish. Seems to work well enough