I2C is a bi-directional bus with at least one master and one slave. Your program on the Raspberry Pi should provide I2C master functions, and the program on the PIC slave functions. The I2C master always initiates data exchanges.
To exchange data with the slave the master sends a byte containing the slave’s address and whether it is going to send more bytes or wait to receive. When the slave receives that byte it should respond accordingly by sending or receiving.
Only when the master (RPi) puts a byte on the bus following an I2C start condition that contains the slave’s address, will an interrupt be triggered on the slave (PIC).
The interrupt service routine must process the received byte and prepare for the next. The read/write bit determines the response and next action, along with housekeeping to prepare for the next interrupt. The exact steps performed by the slave must match what the master expects and vice-versa.