Det grundläggande problemet är att en java.sql.Timestamp inte innehåller tidszonsinformation. Jag tror att det alltid antas vara "lokal tidszon".
En lösning jag kan tänka mig är att inte använda en parameter i en PreparedStatement, utan en tidszon bokstavlig i SQL:
update foo
set ts_col = timestamp with time zone '2012-08-24 14:00:00 +02:00'`;
En annan möjlig lösning kan vara att skicka en korrekt formaterad sträng till en PrepareStatement som använder to_timestamp():
String sql = "update foo set ts_col = to_timestamp(?, 'yyyy-mm-dd hh24:mi:ss')";
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setString(1, "2012-08-24 14:00:00 +02:00");