I am experiencing the exact same error 29 loop. I work closely with these devices and did an experiment that had some interesting results. With the aftermarket battery installed, the update resulted in error 29 every time, but when I re-installed the original 3GS battery the device would complete the update perfectly.
The only difference in these 2 batteries were the circuit board that sits atop the battery and the part number. My original battery read "616-0434" and my replacement read "616-0431," I'm not entirely sure what any of this means.
Seeing the post from the Malaysian users makes me wonder if this is an Apple iOS 4 bug, and some battery model numbers were'nt included in the update.
I think Drew's error message log is VERY telling, there is something in the update that is working with the battery and some batteries aren't responding, or worse, being excluded. Can't wait to get to the bottom of this.