Don't put in the 'while(!RCIF) continue;' line. Instead change the following if statement to be 'if(RCIE && RCIF)'.
The reason is that these processors use a single ISR that must handle all interrupts. Therefore it will only be called when there is an interrupt flag set. Blocking until the RCIF is bad in the situation where some other interrupt source has triggered the ISR - you will stop everything on the device until the RCIF is set which may me anytime in the future.
However, there can be situations where the IF flags can be set but the corresponding IE bit is not set. Therefore the recommended practice for these devices is to test both the IE and IF bits and perform the required code if BOTH are set.
Don't play with the RCIE bit in the ISR. The RCIF bit will clear when you read the RCREG and there is no need to clear the RCIE bit. Anyway, you set it again later in the ISR but outside of any conditional in which case ANYTHING which calls the ISR will cause the RCIE to be set - again this is bad practice.
Make sure that the 'Rxdata' array and the 'index' variable are declared as volatile - any variable that is updated in an ISR needs to be declared as volatile so the non-ISR code will check it properly.
We can't see how you declare these, nor can we see your other code so it is hard to tell how these variables are being used. Perhaps you need to show us a small but complete example that shows the probelm you are having.
Susan