My SFTP server uses an old version which transfers directory listings with the encoding 1252. WinSCP guesses the encoding when the switch ("Utf8") is set to 2.
My problem was that the first session calls ListDirectory and the directory listing contained a german umlaut. So WinSCP guessed that the server encodes filenames with 1252 instead of utf8. When I used this session to download files, everything was working correctly because WinSCP sent the requested filenames encoded with 1252.
But then I converted my code to the multithreaded variant from https://winscp.net/eng/docs/library_example_parallel_transfers
and the download didn't work anymore, because the tasks create new sessions which don't know about the encoding. They assume that the server uses utf8 and send the requested file paths as utf8. The server decodes the paths as 1252 and replies that the files don't exist.
My workaround is to call ListDirectory for a directory with umlauts in file names for each new session (after opening the connection to the server), so that the session switches to encoding 1252.