Timer programming

The limit of 30 for OCR2A-OCR2B is probably due to the time for ISR call, the storing and retrieving of registers, ect.

Yes, it is due to interrupt latency: when the 1st interrupt is being serviced (the context saving takes around 20 ticks), global interrupt is disabled. But if the 2nd interrupt arrives before the exeution of the 1st isr is finished, it is not serviced until the 1st interrupt is finished and global interrupt is re-enabled.

gcc-avr, the compiler behind the arduino ide, is actually quite good. You may speed up using more optimization (-O3 for example), or naked isr (no automatic context saving).

Using isr allows you to get very accurate timing. You just need to know its limitations.