I've been using the TWI as I2C with no trouble, except for the Write 16-bit mode. The following code should send 3 bytes: Address, Index, and Value. According to my 'scope, it only sends Address and Value. I think I'm missing something small but important. I'm using a 21368.
VOID writeI2C (I2C_DEVICE_ID device, UINT index, UINT value)
// write the device address
address = I2C_ADDR[device];
*pTWIMADDR = address;
// write the index combined with the value
*pTXTWI16 = (value << 16) | index; // lower value is written first
*pTWIMCTL = (TWIMEN | (2 << 6));