Problem: an interrupt routine (ISR) blocks all other interrupts until it returns. This can be altered, but you should not try to change anything there. Knowing this the conclusion should be: make the ISR as short as possible.
The result is something like this: create a global volatile variable signaling that the interrupt fired. In the ISR you only set this variable. In the main loop() you check the status of the variable and start your routines accordingly. They should reset the global variable after getting all information the interrupt was meant to inform about.
You can do more in the ISR, but nothing that depends on other interrupts like for instance serial communication.