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.