I'm currently working on an MPC5604 project that uses the embedded I2C interface as a master. From the hardware documentation (I'm waiting for the prototype) it looks like the I2C interface, when acting as a receiver, requires the driver set the next bytes acknowledge state (in IBCR.NOACK) before reading the data register and that reading the data register starts the next bytes transfer. If true this has the unfortunate effect of making the driver decide whether it wants to receive the byte after next before it can even examine the current byte. Ideally, the driver would be able to examine and process the current byte before its acknowledge. Of course I could be misinterpreting the documentation, in which case ignore this.