Pass timestamps as string literals
Refer to documentation
Try this insert:
INSERT INTO changesets
(changeset_id,user_id,open,min_lat,min_lon,max_lat,max_lon,created_at,closed_at)
SELECT 16465146,1315463,false,27.6785105,85.3408257,27.6849711,85.350291,
'2013-06-08T06:29:51Z','2013-06-08T06:32:52Z'
WHERE NOT EXISTS (SELECT * FROM changesets WHERE changeset_id=16465146);
or even better give them explicit types like here:
INSERT INTO changesets (changeset_id,user_id,open,min_lat,min_lon,max_lat,max_lon,created_at,closed_at)
SELECT 16465146,1315463,false,27.6785105,85.3408257,27.6849711,85.350291,
TIMESTAMP WITH TIME ZONE '2013-06-08T06:29:51Z',
TIMESTAMP WITH TIME ZONE '2013-06-08T06:32:52Z'
WHERE NOT EXISTS (SELECT * FROM changesets WHERE changeset_id=16465146);