The problem is that you are running those commands in two different processes (even you use the same object you run Start twice) so the username and password has no effect on the RDP command...
(Actually reuse of the process object is not supported and may have unexpected results)...
So you have to run it in a single call...
You may use the /c command line options of cmd.exe like this:
String szCmd = "/c cmdkey.exe /generic:ip /user:username /pass:password & mstsc.exe /v ip";
ProcessStartInfo info = new ProcessStartInfo("cmd.exe", szCmd);
Process proc = new Process();
proc.StartInfo = info;
proc.Start();