Looking at 1.0.5 Arduino docs on Wire library, I think the proper way for reads are:
beginTransmission(devID)
write(addr)
endTransmission
requestFrom(addr, count)
while (Wire.available()) {
data = Wire.read()
}
There's no need for beginTransmission before the requestFrom. Also, there is no need for endTransmission. In the current I2Cdev.cpp, by placing the extra beginTransmission you just added an extra entry to the write buffer. When you issue the endTransmission (which is AFTER requestFrom), you are generating a new write transaction with ONLY the devID. In fact, the current code behaves differently for Due and Uno. For the Due code, not only generate an extra unneeded writing of the devID, if also writes an unneeded address.