Two functions in the high priority interrupt
There is much silliness here:

Your interrupt routine is just jumping into another routine instead of executing directly.  You may need to do something like that if you are also using low priority interrupts, but this doesn't seem to be the case.

What's with setting GIE to 0 in the interrupt routine?  You need to actually read the datasheet.

Even worse, you are setting GIE to 1 near the end of the second interrupt routine.  I could try to explain why you shouldn't do that, but you need to read the datasheet anyway, so you can discover for yourself why this is a dumb idea.

By being too clever by a half, as the British like to say, you have defeated the compiler's means of properly turning on interrupts again at the end of the interrupt service routine.  Put another way, you are no longer running a RETFIE instruction.

This whole thing could have been done much more easily in assembler, and then maybe you'd see how the interrupt code is messed up the way it is now.  Unlike on large systems with many levels of abstraction, on small resource limited systems using a compiler doesn't alleviate the need to actually understand what is happening at the machine instruction level.

Messing with machine details like interrupts absolutely requires reading the datasheet.