I cannot see that you issued a I2C_SCB_SetSlaveInterruptMode(). Don't know if that changes behavior:
I actually had that code and found it un-necessary. I get the interrupt, but when I go to get the data size of the buffer, the function returns 0. I think this might have something to do with the custom interrupt being called first and then normal processing is performed after the return.
Two possible solutions.
Using Macro Callback. This is explained in Creator help. Modify CyCallback.h file:
insert a #define I2CSlave_I2C_ISR_EXIT_CALLBACK and declare a function I2CSlave_I2C_ISR_ExitCallback() that will be called just before the interrupt handler is exited.
Polling (as before). Serial communication is comparably slow, so just setting a flag which is checked and acted upon in the main loop usually is fast enough.