Estou respondendo minha própria pergunta, pois consegui evitar falhas. No entanto, ainda tenho problemas com erros secundários e iniciei um novo tópico com as especificidades.
Meu código de recuperação agora lida com erros secundários de maneira diferente. Ele tentará novamente os deadlocks algumas vezes, mas somente enquanto o erro for um deadlock. Se ocorrer qualquer outro tipo de erro o aplicativo irá desistir.
Embora isso signifique usuários desapontados recebendo erros, não tive uma falha de cluster desde essa alteração e não vi o temido erro "servidor ausente".