I attached gdb to the running process and got some more information.
It turns out that this has nothing to do with X. It's just that
starting emacs under X causes emacs to try to allocate memory, and
this makes the problem show up very quickly.
It looks to me like emacs gets stuck in morecore_nolock() and/or
_malloc_internal_nolock(), which are defined in src/gmalloc.c.
Apparently, emacs has a peculiar way of managing memory on Cygwin,
and this chokes on the changes to the heap start address as of
2011-07-21. I don't know enough programming to fix this. If anyone
wants to try, the relevant source files to look at are gmalloc.c,
sheap.c, and unexcw.c. The second and third are compiled only in
the Cygwin build, and the first also has some Cygwin-specific stuff.
Maybe I should take this to the emacs-devel list at some point, but
I'll wait a while to see if someone on this list can help.