Specifically, for the point-in-time types whenever one type is deferenced using AT TIME ZONE the alternate type is output.
SELECT pg_typeof(now()); -- timestamp with time zone (timestamptz)
SELECT pg_typeof(now() at time zone 'utc'); -- timestamp without time zone (timestamp)
I'll agree that this was a surprising finding for me too, but in the overall scheme of how PostgreSQL works, and other features it provides (e.g., TimeZone GUC and to_char()) it fits.
David J.
P.S. All timestamptz values are stored at UTC without knowledge of the original timezone.