I just looked at the ChangeLog between those two snapshots. The following
looks like the culprit change:
2006-11-29 Corinna Vinschen <(snip)>
* path.cc [snip]
(cwdstuff::init): Initialize cygheap->cwd with current working
directory. Change to windows_system_directory afterwards.
With that change, any use of non-Cygwin calls, e.g., GetCurrentDirectory,
or ShellExecute (which calls GetCurrentDirectory under the covers, it
seems) will produce the problem you're seeing (Windows system directory as
the current directory).
So it looks like you ought to call cygwin_internal(CW_SYNC_WINENV) after
all, as it syncs more than the environment variables...