Lo único parecido que me ha pasado a mi fue con un 16F628A con un MAX232 que sólo funcionaba si tocaba con el dedo el cristal de cuarzo, obviamente era un error de falta de masa (GND) :shock:
Por fin encontré la solución.
He añadido la cláusula NOINIT a la directiva del I2C, para que sólo lo declare, pero no lo inicialice hasta que llegue el comando I2C_INIT más adelante.
Y así funciona bien.
Misterios de la cienciaCódigo: C++
#use I2C(I2C2,NOINIT)