Vorrei controllare se i tuoi aggiornamenti sono all'interno di una transazione. Se lo sono, potrebbe spiegare perché muore dopo una certa quantità di dati "modificati". Potresti controllare quanto è grande il tuo "tempdb" come indicatore.
Inoltre ho visto casi in cui durante transazioni di lunga durata il database moriva quando ci sono altri "usi" contemporaneamente, sempre a causa della transazionalità e dei livelli di isolamento impropri utilizzati.
Se puoi dividere il tuo lavoro in blocchi indipendenti non sovrapposti, potresti volerlo fare:come fare il lavoro in blocchi per date, intervalli di ID di oggetti "root" ecc.