Como alguien ya señaló: No esperes que un comportamiento indefinido sea reproducible.
Dicho esto, hay muchas variables. Por supuesto, existen los más obvios (como la arquitectura de CPU / modo de 32 bits o 64 bits; versiones exactas del sistema operativo u otro software involucrado (como .NET); etc.) pero también existen los más sutiles. Al igual que la cantidad de memoria que se proporciona el proceso en un momento en el que solicita algo o incluso cuánto pide en un momento.
Entonces, si comprueba cuánta memoria virtual tiene el proceso en diferentes máquinas antes de fallar, y los números son diferentes, esta puede ser una buena razón para que se bloquee en un sistema pero no en el otro.
La cantidad de memoria que se proporciona a la vez puede depender de muchos factores diferentes, como la cantidad de memoria física disponible, la cantidad de espacio de intercambio disponible, la estrategia de intercambio utilizada, la asignación de memoria actual, etc. Si lo probó en una máquina con 16 GB de RAM 10 veces, utilizando actualmente 1 GB de RAM para el sistema operativo y otras aplicaciones, y el proceso no se bloquea, realmente no reproducirá ese comportamiento de manera confiable. Mantuviste las variables relativamente constantes. Es muy probable que se bloquee las 10 veces en una máquina con el mismo software, pero solo 4 GB de RAM y que use 3 GB.