A large number of services (most of which appear to be core Windows services) are showing in services.msc with their service names rather than their display names (eg. BITS instead of Background Intelligent Transfer Service), and their description as 'Failed to Read Description. Error Code 2'.
I've tried running
sfc /scannow as suggested in https://stackoverflow.com/questions/13153214/windows-service-is-giving-description-failed-to-read-description-error-code-2, but that hasn't worked.
A large number of items in Group Policy Editor (gpedit.msc) are showing in the form @(name).dll,-(number). For example, under Windows Settings > Security Settings > Local Policies > Security Options, the first option is listed as '@appinfo.dll,-200'.
I'm guessing this is a MUI / resources issue from the format of those names...
The only thing I can think of that might have caused this kind of damage is the AMD Catalyst Uninstall Utility, which I ran shortly before I noticed the problem. In the log file for that, it mentions deleting the registry key
SYSTEM\CurrentControlSet\Control\MUI\StringCacheSettings - is it safe to copy this key from another computer where everything's working to see if that fixes it?