O problema básico é que um java.sql.Timestamp não contém informações de fuso horário. Eu acho que é sempre assumido como "fuso horário local".
A solução que consigo pensar é não usar um parâmetro em um PreparedStatement, mas um literal de fuso horário em SQL:
update foo
set ts_col = timestamp with time zone '2012-08-24 14:00:00 +02:00'`;
Outra solução possível poderia ser passar uma String formatada corretamente para um PrepareStatement que usa 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");