I2C is not broken on the Due. I've ran it for days at a time without a failure. Have you tried the i2cscanner sketch to see if you are using the correct address?
http://playground.arduino.cc/Main/I2cScanner
edit: The I2C address could be 0x68 or 0x69, depending on the state of AD0. If that pin is floating, it could be changing.
And this. I found some devices require a short delay here.
Wire.endTransmission();
delayMicroseconds(100); // add this delay
Wire.beginTransmission(devAddr);
Wait. That was wrong. There is no beginTransmission for a requestFrom.
Wire.beginTransmission(devAddr);
Wire.write(regAddr);
Wire.endTransmission();
delayMicroseconds(100);
Wire.requestFrom(devAddr, (uint8_t)min(length - k, BUFFER_LENGTH));