Either a required impersonation level was not provided, or the provided impersonation level is invalid
It is flawed as long as you're using the .NET Process class, it will always start with the identity of the parent process. To run it under another identity it looks like you've got to use the win32 api CreateProcessAsUser (which I've not got working yet).
I needed to run it elevated (i.e. Visual Studio as Administrator).