It's appears there is sometimes some threading issues when using Process.Start() to spawn a browser by starting a URL. It's not too clear what the issues are; but the following works around the problem (C#):
Process process = new Process();
process.StartInfo.FileName = "rundll32.exe";
process.StartInfo.Arguments = "url.dll,FileProtocolHandler " + url;
process.StartInfo.UseShellExecute = true;
process.Start();