When you pass a duration to tone() it becomes a blocking call, meaning it does not return until the duration has passed. Since you're calling it within an ISR, this prevents anything else from happening during that time.
I suggest you completely abandon use of an ISR to trigger this, and use the technique demonstrated in 'blink without delay' to start and stop the tone at regular intervals from within loop().