I have read that the wire.h doesn't follow the correct i2c protocol exactly in that it doesn't handle double starts. The post I saw:
I’ve noticed that with the code provided from the guys at i2cdev, the DMP quaternion works great until there is almost any hang in the main loop between update reads to the FIFO buffer. I’m not sure what exactly is going on there, but it’s making me want to just implement a filter myself.
This is probably because the Wire.h lib is not up to it (drops in comms and if you need double start messages). I suggest you replace with this lib instead for all i2c comms: http://dsscircuits.com/articles/arduino-i2c-master-library.html
Dave