El problema básico es que java.sql.Timestamp no contiene información de zona horaria. Creo que siempre se supone que es "zona horaria local".
La solución que se me ocurre es no usar un parámetro en una declaración preparada, sino un literal de zona horaria en SQL:
update foo
set ts_col = timestamp with time zone '2012-08-24 14:00:00 +02:00'`;
Otra posible solución podría ser pasar una cadena con el formato correcto a una instrucción PrepareStatement que use 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");