Processing SPI transactions using interrupts
You didn't mention the PIC variant; SPI peripherals as well as interrupt controllers are different in different PICs. Here is an example of handling similar problem using PIC16:

https://github.com/felis/DMCI-XC8/blob/master/bsp.c#L91

It also shows state machine approach.