The timer interrupt function includes a multiple interrupt declaration (_multi_interrupt), but it does not seem to be working.
It is programmed to service the high-priority interrupt after the timer interrupt service has been completed.
Multiple interrupt declarations are used only to prepare for handling of multiple interrupts (in addition to normal interrupt servicing, this includes saving information such as return addresses saved to EIPC and EIPSW).
Since the correct timing for acknowledging multiple interrupts differs among different systems, in this case "__EI();" should be used to enable interrupts, via the timing by which multiple interrupts are enabled.
If this is overlooked, the problem you refer to will occur.
Also, when quitting an interrupt function that includes such a multiple interrupt declaration, interrupt-disabled status must be set.
Therefore, first execute __EI(); then execute __DI(); before terminating the interrupt.