Estoy respondiendo a mi propia pregunta, ya que me las arreglé para evitar accidentes. Sin embargo, todavía tengo problemas con errores secundarios y comencé un hilo nuevo con los detalles.
Mi código de recuperación ahora maneja los errores secundarios de manera diferente. Volverá a intentar los interbloqueos un par de veces, pero solo mientras el error sea un interbloqueo. Si ocurre cualquier otro tipo de error, la aplicación se dará por vencida.
Aunque esto significa que los usuarios decepcionados recibirán errores, no he tenido un bloqueo del clúster desde este cambio y no he visto el temido error de "desconexión del servidor".