I think the bigger question is if the SSP interrupt is being handled correctly to begin with.

The clk line can be held low all day long and you'll never get an interrupt.
But if you are trying to send more than one byte at a time without leaving the handler, then the master may fail in the middle and stop clocking out the data, which could cause it to hang.

If you only send one byte at a time and exit the handler ... when it's time to send the next byte, you'll get another interrupt ... dump a byte into SSPBUF and exit again. If the master fails, it won't matter, and can never hang-up.

In your "unstick" routine, the retfie 1 will just exit the HP int, then execution will return to the LP int. It would never make it to the INT_RETURN after the retfie.

If you are sending more than one byte in the slave's handler without exiting, then you're probably sitting in a loop waiting for SSPIF before putting the next byte in SSPBUF. So in that loop, watch for TMR4IF too. If the timer overflows, exit the handler.