So I've been banging my head against a wall for the last week, trying to get USMT to work in a PC refresh scenario, using hardlinking as explained here, but I kept running into the same error, over and over and over again. When ever the task sequence got to the Release State Store step, it would error out with a 0x00004005 error.
Searching the internet for the error kept coming up with the same thing over and over again, that the problem was with MS KB977203. Which was all fine and good, but after applying the recommended fixes I still kept having the same error, in the same place.
I finally decided it was time to go back over each and every step in the TechNet guide, that I had used to set up the task sequence in the first place. That's when I discovered the problem, part of the guide is wrong, though admittedly it was partly my fault as well.
Steps 5 and 7 of Method 2 both say to click on the Capture User State task and add a new task sequence variable before the Capture User State task sequence. The problem here is twofold. First, click on the Capture User State task, per the guide, and following the rest of the instructions place the task sequence variables AFTER the Capture User State task, not BEFORE it. Second, I missed the BEFORE part and didn't check to make sure that the variables were in the right place.
After rereading the guide and making sure that the variables were in the right places (you can just drag and drop them), the error went away.
Lesson learned: read more closely and double-check.