Fix:
properties.put("characterEncoding", "latin1");
properties.put("clobCharacterEncoding", "utf8");
When sending as a stream of character data you need to send the bytes matching the target encoding.
BTW, in this case it should be enough to just set:
properties.put("characterEncoding", "utf8");
Just mind that sending bytes as UTF-8 you open the door to sending characters that can't be encoded in Latin1 and get errors because of that. Sending as Latin1 will replace all those characters by '?' beforehand and, thus, no errors.
And, remember, character streams must leave the driver matching exactly the character set of the target column.
I tested the above with both MySQL Server 8.4.0 and 5.7.44.