The reference page states that lowByte and highByte return a byte. This appears not to be the case.
I discovered this when making a call like:
if i2cdata is type int, this works fine. If i2cdata is type word, a compiler error is generated.
I am not sure exactly why but I suspect it has to do with the way lowByte and highByte are implemented in Wiring.h:
#define lowByte(w) ((w) & 0xff) #define highByte(w) ((w) >> 8)
so what type you get from highByte and lowByte depends on what you feed them.
You can easily fix this by using (byte)lowByte(xxxx) but it is cetainly counter-intuitive.