確かに、正常値になりますね。。timestampに書き換えたいと思います。
色々試したところ、
select date_trunc('month','2004/3/01'::abstime+'1 months');
を
select date_trunc('month','2004/3/01'::abstime)+'1 months';
とすることで回避できました。
これってどういう解釈なんでしょうね。
PostgreSQLにとっての理屈があるとは思うのですが。。
とにかくありがとうございました。