Also, the man page indicates that atd will take a "-n" parameter to prevent it
from forking, and a "-d" to send debug info to stderr rather than syslog -
neither of which work. Either the man page should be updated or the program
corrected to support the commands.

I'm seeing the same error in the atd that comes with F7, with all updates
applied. The system was updated from FC6, and there were at jobs in the queue
at the time -- but new at jobs cause it to die too.
When the time comes from atd to run a program, it does, but then atd
immediately dies. atd -d fails with the same error as given
above --
# atd -d
*** glibc detected *** atd: free(): invalid pointer: 0xbfd46bef ***
======= Backtrace: =========
/lib/libc.so.6[0xe39f41]
/lib/libc.so.6(cfree+0x90)[0xe3d580]
atd[0x8000181a]
...
I guess for now my workaround is to replace running `atd' with a script that
just runs at -d in a loop --
#!/bin/sh
while : ; do
at -d
done
and run that instead.