If you ask windows to give you info about file aaa/bbb/xxx, it will return the info and the name will be set to that. Yet actual file name might be aAA/bBb/xXx. The only way to find the real name is to list the every directory up to the file and try to match the filename.
You can enumerate all hard links with FindFirstFileNameW+FindNextFileNameW and select one equal (case insensitively) to original path without drive latter.
I think you mistaken FindFirstFileNameW with FindFirstFileW.
FindFirstFileNameW get you full path (without drive letter) with only one API call (most files have only one hard link).
instead of detecting for the case difference in the filesystem, would there be a way to detect behavior in syncthing itself, and give a warning that case might need to be checked? like, instead of the somewhat cryptic
“file modified but not rescanned; will try again later”
maybe it could say
“file modified but not rescanned; will try again later (note that this can indicate capitilzation conflicts in synced files)”