Ran into this problem this morning when installing Service Pack 1 for Windows 2008 R2.
Service Pack installs successfully, but after we couldn’t login via remote desktop services.

Checked the eventlog remotely and found the following in the application log.
Event ID: 1000 reports an application error…

Faulting application name: svchost.exe_TermService, version: 6.1.7600.16385, time stamp: 0x4a5bc3c1
Faulting module name: rdpcorekmts.dll, version: 6.1.7600.16952, time stamp: 0x4f1f9e66
Exception code: 0xc0000005
Fault offset: 0x000000000000a793
Faulting process id: 0x1810
Faulting application start time: 0x01cda141e1e73a0d
Faulting application path: C:\Windows\System32\svchost.exe
Faulting module path: C:\Windows\system32\rdpcorekmts.dll
Report Id: 7b98872b-0d35-11e2-bbf8-2c768aaa6162

After a quick G-search I found the following thread;

http://social.technet.microsoft.com/Forums/en-AU/winservergen/thread/f5855b60-f29c-4c90-b364-e364589e5267

And the following fix:

You need to run this with a user that is an admin on the target system.
Copy PsExec and rdpcorekmts.dll (the new version) to a folder.
Create a file named servernames.txt and add the name of the server(s) you want to fix.
Create a start.cmd file edit it and add the following:

@echo off
Echo ****************************************************
echo * This process will update and change the file rdpcorekmts. *
echo * If you don’t want to do that, ‘X’ out now                 *
echo ***************************************************
pause

:stop remote desktop services for /f %%i in (servernames.txt) do psexec \\%%i net stop “Remote Desktop Services” /y

:Take Ownership for /f %%i in (servernames.txt) do psexec \\%%i takeown /F c:\windows\system32\rdpcorekmts.dll

:Change permissions to full for /f %%i in (servernames.txt) do psexec \\%%i icacls c:\windows\system32\rdpcorekmts.dll /grant administrators:F

:Copy in newer version for /f %%i in (servernames.txt) do copy rdpcorekmts.dll \\%%i\c$\windows\system32\

:Change permissions back to read-only for /f %%i in (servernames.txt) do psexec \\%%i icacls c:\windows\system32\rdpcorekmts.dll /grant administrators:R

:start the service back up for /f %%i in (servernames.txt) do psexec \\%%i net start “Remote Desktop Services” /y
Echo***************************************************

echo * Remove the names of the affected servers in the file Servernames *
echo***************************************************

Echo *Should be all done now. *
echo **************************

pause exit

Doubleclick start.cmd

You should now be able to login to your server.