When I get something like this, I go through a checklist similiar to what I have below:
Are you sure the program is running over the exact same dataset?
Is it using some variables that would cause it to select different records if ran last nignt in batch and today interactively?
Did you take a dump when it failed to help you diagnose the problem?
Have you tried to run it in DEBUG both in Batch and Interactively?