In 9.3 HEAD I am getting what seems to be spurious wrap-around shutdowns.
postgres=# SELECT datname, datfrozenxid, age(datfrozenxid) FROM pg_database;
datname | datfrozenxid | age
-----------+--------------+-----------
template1 | 2621759843 | 0
template0 | 2621759843 | 0
postgres | 2571759843 | 50000000
jjanes | 2437230921 | 184528922
While the behavior is weird, it is not a regression (also present in 9.2 with suitable changes in timing) and the shutdown is not spurious.
If I execute the above query immediately after the shutdown, I see what I would expect, jjanes has an age of about 2^31.
The one table that is holding everything back is already getting autovac for wraparound at that point, and eventually that vacuum finishes. When done, pg_class and pg_database are updated (I don't know how they get updated without trying to assign another transaction), and then I get the above query results.
I would think the database would re-allow new transactions at this point, but it does not. I don't know why.
Since this isn't a regression in 9.3, I probably won't pursue it any more at this time, unless encouraged to.