I did as requested. Naive search does not use the > operator and only uses the = operator. So presumably the problem was with the > operator. By replacing it byWideCompareText and handling ITF8 as follows:
else if WideCompareText(UTF8Decode(Strings[iPivot]), UTF8Decode(SubStr)) > 0 then
instead of:
else if (Strings[iPivot] > SubStr) then
It works! And now both algorithms yield 326/375 words.
Many thanks for your help.