Ok, isso acabou sendo um problema com nosso próprio código, em vez de algo especificamente errado com o APC ou o Symfony2.
Para a referência de qualquer outra pessoa que possa se deparar com essa:
-
Estávamos usando o componente ApcUniversalClassLoader do Symfony2.
-
Isso permite que você especifique um prefixo para seus arquivos de cache.
-
Esse prefixo era o mesmo em cada instância do nosso aplicativo; é por isso que funcionou bem, desde que houvesse apenas uma instância por servidor.
-
Como o prefixo era o mesmo, a APC tentou carregar as classes pertencentes à primeira instância do aplicativo que havia sido acessado imediatamente depois que o servidor foi reiniciado.
-
Alterar o prefixo para ser diferente por instância do aplicativo faz com que ele se comporte corretamente, carregando as classes das pastas corretas.
Espero que isso impeça que qualquer outra pessoa bata a cabeça na mesa quando perceberem por que ela não está funcionando:)