This is not always reproducible ... but ...
After many tests I can confirm that if I have a field in a record whose value is "This is a Test" ... then the server value is changed (important: by editing one word and leaving the first letter unchanged) to "This is a Test1"
and the a client value is changed (by editing the same word to a different value, leaving the first letter unchanged) ... to "This is a Test2" ... during the sync it will occasionally not be picked up as a conflict (and the client value will
persist for both server and client).
On the other hand, if the entire word in the field is changed (for example changing "This is a Test" to "This is a Sample" on the server and to "This is a Sample2" on the client) it seems to always raise the conflict.
Is the ApplyChangeFailed event raised based on a hash of the record instead of comparing field values ... and would that be less reliable?