I have a quick solution to this. Edit /etc/X11/prefdm and anywhere it runs
/usr/sbin/gdm add the --no-daemon parameter. Haven't tested this issue with
kdm/xdm/et cetera.
gdm itself forks automatically, that's where the issue lies. Scott has a
somewhat controversial but ultimately effective way of getting around forking
daemons via ptrace (It will be interesting to see how it fares given that gdm
forks the holy hell out of itself). It may be worth trying to get in early.
There may also be a more upstarty way of replacing prefdm entirely with an event.

That's more upstream's decision. I do think its probably the only available
solution to the fork issue long term, and its done in a fairly benign way, so I
intend to support them in it. If we set up daemons that don't fork, then it
won't affect us at all.

Whooops, this is simpler than we made it out to be.
The old inittab event is:
x:5:respawn:/etc/X11/prefdm -nodaemon
Ergo, the upstart event should be -nodaemon as well - this should just be
changed in the upstart event, not /etc/X11/prefdm.