The only problem I associate with UTF8(Lower/Upper)Case functions is the error that occurs when a lowercase letter (code point) has a different length (number of bytes) than an uppercase letter (code point).
I dont' use very often UpperCase in languages, but I used them (it's for this reason that I know Lazarus has difficulty performing such operations on the characters shown).
I worked with other tool in Windows, but I never saw different code lenght in UPPERCASE or LOWERCASE with Windows (I use UTF16). I saw totally different code between them, I think 'cause use of extend and supplemental use of BMP.
To my knowledge, differing code point lengths has been addressed in the trunk version (main). There are more than likely still mapping issues for upper- and lowercase conversions... but you thank the unicode standard for that over-engineered nonsense.
May be someone think that unicode is not a good instruments, but I think is the better that we have now. Look at web, only with unicode is possible to saw it in the correct way with every language.
Without unicode we still talk about CP ...