Strange I2C Behaviour
It looks to me that you're ORing terms that you need to be ANDing. I2C_ON is 0xFFFF, so the register is going to be all 1's.

Take a look at the i2c.h file for PIC24:

#define I2C_ON                      0xFFFF /*I2C module enabled */


No matter what else you put in the configuration word, they're all going to be 1. Many settings you need (general call off, 7-bit address, etc.) need their corresponding bits to be zero.

Here's how I init the I2C peripheral on a dsPIC33 (essentially the same peripheral and same library calls):

OpenI2C1(I2C1_ON &amp; I2C1_IDLE_CON &amp; I2C1_7BIT_ADD &amp; I2C1_STR_EN &amp; I2C1_SLW_DIS &amp; I2C1_GCALL_DIS &amp; I2C1_SM_EN &amp; I2C1_IPMI_DIS, clk);


Also bear in mind that the clock argument should be unsigned int - not 4.2 :)

(When in doubt, don't use the library call and manually set the SFR bits yourself.)