Descobrimos o problema, era algo que uma pessoa de fora nunca poderia saber ...
Como queremos compartilhar uma sessão entre dois aplicativos, adicionamos um 'SharedSessionModule' ao aplicativo da web. O que isso basicamente faz é alterar o nome do aplicativo antes de buscar a sessão correta do banco de dados ASPState. Eu tenho este módulo aqui: link
Isso funciona, mas atrapalha os componentes internos do IIS fazendo com que ele falhe ao reciclar o appPool.