OK, figured it out. Turns out I was missing some critical system files (although I'm not sure how). I ran the following:
sfc /scannow
which told me there were some errors it couldn't fix. Then I ran the following command to scan the log (sfc will prefix actions it took with [SR]):
findstr /c:"[SR]" %windir%\Logs\CBS\CBS.log >%userprofile%\Desktop\sfcdetails.txt
The path at the end is where you want to save the output - in this case, I decided to put it on my desktop.
There were a couple of error messages related to two files: wvc.dll.mui and wusa.exe.mui. Specifically, there were error messages that it couldn't reproject the files because they were corrupted. They were in fact missing. In order to fix it, I had to extract the files from the original Windows 7 DVD (I followed the instructions here and copy them into C:\Windows\SysWOW64\en-US.
An interesting point is that even after fixing my .Net Framework 4 issues, running "sfc /scannow" still yielded the following messages about wvc.dll.mui and wusa.exe.mui:
2011-04-24 15:52:34, Info CSI 000002e9 [SR] Cannot repair member file [l:22{11}]"wvc.dll.mui" of Microsoft-Windows-PerformanceToolsGui.Resources, Version = 6.1.7600.16385, pA = PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 (10), Culture = [l:10{5}]"en-US", VersionScope = 1 nonSxS, PublicKeyToken = {l:8 b:31bf3856ad364e35}, Type neutral, TypeName neutral, PublicKey neutral in the store, file is missing
2011-04-24 15:52:34, Info CSI 000002ea [SR] Cannot repair member file [l:24{12}]"wusa.exe.mui" of Microsoft-Windows-WUSA.Resources, Version = 6.1.7600.16385, pA = PROCESSOR_ARCHITECTURE_INTEL (0), Culture = [l:10{5}]"en-US", VersionScope = 1 nonSxS, PublicKeyToken = {l:8 b:31bf3856ad364e35}, Type neutral, TypeName neutral, PublicKey neutral in the store, file is missing
2011-04-24 15:52:34, Info CSI 000002eb [SR] Cannot repair member file [l:24{12}]"wusa.exe.mui" of Microsoft-Windows-WUSA.Resources, Version = 6.1.7600.16385, pA = PROCESSOR_ARCHITECTURE_INTEL (0), Culture = [l:10{5}]"en-US", VersionScope = 1 nonSxS, PublicKeyToken = {l:8 b:31bf3856ad364e35}, Type neutral, TypeName neutral, PublicKey neutral in the store, file is missing
2011-04-24 15:52:34, Info CSI 000002ec [SR] This component was referenced by [l:266{133}]"Microsoft-Windows-WindowsFoundation-LanguagePack-Package~31bf3856ad364e35~amd64~en-US~6.1.7601.17514.Windows Foundation Language Pack"
2011-04-24 15:52:34, Info CSI 000002ed [SR] Cannot repair member file [l:22{11}]"wvc.dll.mui" of Microsoft-Windows-PerformanceToolsGui.Resources, Version = 6.1.7600.16385, pA = PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 (10), Culture = [l:10{5}]"en-US", VersionScope = 1 nonSxS, PublicKeyToken = {l:8 b:31bf3856ad364e35}, Type neutral, TypeName neutral, PublicKey neutral in the store, file is missing
2011-04-24 15:52:34, Info CSI 000002ee [SR] This component was referenced by [l:266{133}]"Microsoft-Windows-WindowsFoundation-LanguagePack-Package~31bf3856ad364e35~amd64~en-US~6.1.7601.17514.Windows Foundation Language Pack"
Although the ones about reprojecting were gone. Not sure what to make of that.
Best Answer
I'm not sure what the problem was with .NET Framework, but I re-installed in Custom mode, and made sure to uncheck any components that had ".NET" in the name:
I think these are the only ones.