Maybe I'm missing something, but it looks like you are polling for the Interrupt Staus Bit in MAIN, and when it is set, you go off and read the receive register. Because you are using a polled operation, not an interrupt-driven one, you can't catch data as soon as it arrives. If you use Darrel's Instant Interrupts and make your I2C routine an ISR, you should be able to receive data any time - even halfway through an A/D conversion.