Stange I2C problem

Wire.print is all very well but the Wire library has a limit of 32 bytes to be sent between Wire.beginTransmission and Wire.endTransmission.

A quick count would tend to suggest you have overflowed that which explains why you are getting truncation and you "fix" it by reducing the stuff that comes before.

Also please note that, at present, the String library has bugs as discussed here and here.

In particular, the dynamic memory allocation used by the String class may fail and cause random crashes.

I recommend reworking your code to manage without String. Use C-style strings instead (strcpy, strcat, strcmp, etc.).