Hi Nadya,
I noticed that you said the table used by this process was created via SQL Select. It sounds like after the SQL Select you're issuing REPLACE statements that cause 700,000 and some records to be changed. I wonder if you could eliminate this problem entirely by doing whatever the calculations are in the SQL statement itself? Don't forget you can call UDFs from a SQL Select.
Also, if the table is created via SQL Select, unless you are closing the table after you create it, the current user is going to have it open exclusively, so, unless you need to revert, there's really no point in using any kind of buffering.