Hi,
The cause of the problem is pretty simple. The solution probably isn't.
The delayMicroseconds() function disables interrupts during the delay. If your external interrupt occurs during a delay, which apparently happens a lot, the interrupt will either be missed, or at least blocked until delayMicroseconds returns.
Possible solutions:
1 - if your delays are greater than 1000 microseconds, and the timing is not critical, you can use the delay() function, which does not block interrupts. However, delay() itself is not very accurate and can be off by 1/2 millisecond.
2 - write your own delayMicroseconds function that doesn't block interrupts. Note that because the function uses timed loops, every time you get an interrupt during a delay, the delay will be lengthened. So that too is not very accurate.
3 - instead of using a delay, sample the timer0 clock and base your toggle on elapsed ticks. You'll need code to handle overflows and delay values greater than 255 clock ticks.
Hope this helps,