Hank that looks like good logic to me, but to make sure I get where you are heading -
on switch press, call ISR,
Inside ISR, wait for the signal to cross zero (in either direction, max time here would be .3333mS?)
Crossed so do what needs to be done and leave.

Yes you can use while/end like that.
Don't forget to set/clear the IOC caller so as not to re-trigger as soon as you leave.