Have you tried this part of my post?
I haven't tried it out myself yet, but I could imagine that the propagation time of the !ready
from the cellular modem to the micro controler might be too slow.
How does your reconnect behave with this instead
Cellular.off();
delay(500);
Cellular.on();
Cellular.connect();
delay(500);
Particle.process(); // explicitly trigger the background task
if (!waitFor(Cellular.ready, 60000))
System.reset();