I modified Sleep to do an ERR("USING MODIFIED SLEEP!\n") and then added the check for timeout==64, set it to 3000, but it still calls sleep over and over again without any progress. I even took out the check for timeout==64 and just timeout to 3000 for the second test, but I get the same results.
OK. Now stick an ERR into GetThreadContext and dump the output of Eip, so you can see if the remote process is being scheduled at all. If it is (remember logs only show Wine interactions, there can be lots of code which never shows up there), we have some other problem. If Eip never changes then I suspect we've hit a scheduling difference between the Linux and NT kernels which could prove fun :)