Você pode usar o Firebug e colar os cabeçalhos de resposta HTTP. Tenho a sensação de que, embora em seu código você esteja definindo o controle de cache como Public, o Apache está ignorando que, para o tipo Php File, você está definindo o Cache-Control como privado.
Uma coisa que você pode fazer é remover as configurações de cache das Páginas Dinâmicas da configuração do Apache. Isso deve corrigir o problema porque um proxy não armazena em cache uma resposta sem os cabeçalhos corretos.
EDITAR
Oi Sam, Revisitando sua pergunta, encontrei a solução para o problema. O seguinte fragmento de código parece ser um problema. Na saída do seu Php, o cabeçalho Last-Modified sempre muda e, quando um browser envia uma requisição 304 If modified, ele vê uma mudança e, portanto, solicita novamente esse conteúdo.
header ("Last-Modified: " . gmdate("D, d M Y H:i:s", time() - 404800000)." GMT");
Desativar Last-Modified e ETags do seu conteúdo para acelerar o site.
Este site oferece algumas dicas excelentes também.
link