Found and fixed what I believe was communication bug.

Basically if the opcode of a message is corrupted so that it appears to be a
data request, then only the first byte is consumed from the i2c Rx buffer.
Inside the Wire library, if the Rx buffer is not completely consumed, then it
will never give run the rx callback. Therefore in our code we will never receive
subsequent commands and our communication will basically be frozen.