Regardless of anything else, "part of the file at the beginning is missing", if this is happening, it only makes sense here either from server side issue where beginning bytes are skipped such as file start position or transfer loop bug, or from a client wrongly requesting a file start position that's not 0 where that's possible (if you don't know what this refers to eg file transfer resume does this and its how files are resumed).
In other words, if the server sends the first chunk of the file as it should be doing, then WinSCP would be receiving it and saving it and the beginning would be there. A client can request a different start position though where possible to do so, and then that too can chop off a beginning of a file if its wrongly done.
There are other conceivable possibilities but the probability drops a lot and you already have two locations, etc tested so nothing else is expected.
"timing/timeout issue or an overflowing cache" isn't going to have the beginning go missing here. Transfer code classes are simple except for the server file send preparation to get to the transfer byte loop. Far more server side code possibilities do exist for bugs than anything in the client transfer loop. The client really just requests and then waits for bytes. The server is where things tend to go wrong. Just because they didn't reproduce it doesn't ever mean problems don't exist.