Did you run the AUDIT command? Even if it reports fixed 0 erorrs it still seems to help at times.
I had a drawing containing 20 stockpile surfaces and their bases. Two surfaces seemed corrupt, everytime I moved a breakline I'd get a fatal error. I transferred the data to other software as I needed to meet a deadline and wasn't getting the results. When I had some time I retuned to Civil3D, deleted and redefined the two surfaces from scratch, the job seemed to run OK then. I also find I need to remove the outer boundary and redefine it for a surface ad nauseam, as everytime the surface gets edited it seems to ignore the outer boundary definition at some point.