It seems to me that this is really a testing failure which, ironically, could be avoided by automating testing. An automated testing procedure could have ensured that every possible combination of inputs and failures was tried out.
Automated tests are great (I use them all the time). But not all situations can be covered in a test - specially when there is concurrency involved.