To avoid this, I've developed a small application that can warm boot any Mobile 5 and 6 device, as simply as launching a program. The code is easy to understand. Basically it just does a call to the API function ExitWindowsEx. It is described in http://msdn.microsoft.com/en-us/library/ms893047.aspx.
[DllImport("aygshell.dll")]
extern static int ExitWindowsEx(int dwFlags, int dwReason);
function static void Main(string[] args)
{
ExitWindowsEx(2, 0);
}
In order to call the API, we just needed to PInvoke-it! The full program is no longer than the shown in the image bellow...
You can download the tool, named BootMyPhone from here:
Download Full Source
Download Install CAB (for Windows Mobile 5/6)