These confirm what I suspected: that you are storing the strings in C format i.e. zero terminated.
This means one of the standard uses of strings in Basic, as a byte array, can't be used if a zero is needed in the array.
The result of this is that strings cannot be used in I2C where 0 is often a valid data item.
At the moment i2c.write and i2c.read both use strings so i2c isn't usable for any device where 0 is a valid data item to be transmitted or received. This applies to many devices where registers start from address 0.
As per my previous post in this thread, please could you generate a version of the i2c code which uses integers as the parameters rather than strings.
Please also note the same will apply if/when you implement SPI functionality
The alternative is of course to convert string to use standard Basic format: length byte in position 0. This would be the preferred option but is a much bigger piece of work.