Ahh - so, the abbreviation timestamptz helps (since it threw an error when I tried to cast to:timestamp with time zone):
select to_timestamp(extract(epoch from '2014-12-01'::timestamptz));
to_timestamp
------------------------
2014-12-01 00:00:00-05
(1 row)
Works. And I suppose there is no implied garantee that "to_timestamp" and "extract epoch" are inverses of one another...But if nothing else, it still seems to me that "to_timestamp" and "extract(epoch)" are making different assumptions when TZ is not known. In other words, can we say that "extract epoch" assumes noTZ means noTZ, whereas "to_timestamp" assumes that noTZ means GMT.