Я повозился с отладкой кода atexit() в GLIBC, и обнаружил, что это баг в GLIBC — достаточно прозаичный баг, который происходит при достаточно ограниченных условиях.
Я оказался достаточно неудачлив, чтобы попасть как раз на версию GLIBC 2.3.4, в которой баг присутствует. В следующей версии GLIBC 2.4 его уже починили.