Eu acredito que o comportamento que você está descrevendo é normal para o pgpool - Ele degrada um servidor quando ele não consegue se conectar a ele, mas se uma conexão já estiver "estabelecida" ela não morre tão rápido quanto você poderia esperar é provável que lide com falhas transitórias de rede e evite degradar o ambiente para um "soluço").
Por curiosidade, você considerou a replicação do log de streaming disponível no Postgres 9? A implementação mais recente é quase em tempo real e permite que você execute consultas nos servidores escravos. Acredito que a replicação síncrona está chegando em breve (ou já pode ter sido implementada).
Você precisaria de um script ou processo manual para lidar com uma falha (reiniciar um dos servidores "escravos" como mestre e transferir um IP virtual), mas a implementação não é substancialmente diferente do que você obteria do pgpool (re -sync quando um servidor falha, etc.)
A grande vantagem aqui é que você está usando o que está embutido no núcleo do servidor Postgres, e tem alguns testes e documentações bastante extensos no processo beta 9.0. É minha recomendação de fato se você não tiver restrições que tornem impraticável.