Ah, that makes sense. Clearing the interrupt also clears the status flag, so you have to read status before clearing interrupts.
One other way to get the result you want is to start with interrupt on rising edge, then switching to falling edge within the ISR, and so on. CP2102's solution is better.
Discussion to talk about software related topics only.