...which doesn't happen in your test program as it doesn't use as many. Remember that it takes only one page of memory sitting at the wrong virtual memory address to divide the available contiguous addresses in half. I would suggest playing around with the prelink tool to put dynamic libraries in better positions in memory.
I can take a look, but this is a Fedora Rawhide machine, which should run prelink nightly.
I found our mmap - reserve area handling to be problematic for low memory machines...
You can try disabling it (just check libs/wine/mmap.c, mmap_init() and change the first #if to #if 0.)
Thanks for the suggestion, but it doesn't help. I don't think this is a low-memory machine - it has plenty of memory (1G + 512 swap), and most if it is unused. The gnome resource monitor shows 30-40% usage, and it doesn't spike at all when steam is used.
I see some libraries didn't prelink in the log, so I'll try Rob's suggestion, and see if prelink helps things. I am not optimistic though - I've seen this problem for a long time...