Problemas al ejecutar un proceso PsExec desde el código

Estoy experimentando un problema extraño al intentar ejecutar una herramienta de línea de comandos .NET de forma remota usando PsExec.

Cuando ejecuta PsExec desde la línea de comandos, se ejecuta y completa bien.

Cuando se ejecuta desde una aplicación de consola (creando un proceso, ejecutando PsExec.exe con los argumentos necesarios), se ejecuta OK.

Cuando se ejecuta desde nuestra herramienta personalizada interna que se utiliza para ejecutar diferentes tareas, se agota el tiempo de espera o no se completa correctamente.

Aquí está el código que estoy usando:

Process p = new Process();

p.StartInfo.FileName = @"C:\PsExec.exe";
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;

string arg = "-snapshot -display C:\*.msi -s";

p.StartInfo.Arguments = @"\\10.161.203.106 -u user -p pwd -cf C:\FVT.exe " + arg;

Logger.Info(this, "Starting process");

p.Start();
var ended = p.WaitForExit(60 * 1000);

if (!ended)
{
    throw new Exception("Process timed out.");
}

Logger.Info(this, "Process ended");

using (StreamReader sr = p.StandardOutput)
{
    string buffer = sr.ReadToEnd();
    Logger.Info(this, buffer);
}

Este código funciona bien desde la línea cmd o desde una aplicación independiente!

No tengo idea de qué más podría estar mal aquí.

Nuestra herramienta interna genera un nuevo hilo y ejecuta este código en ella.

Actualizar

command line + args en la ventana de línea de comando - funcionando. Los mismos cmd + args, se ejecutan como un proceso con RedirectOutput: se detiene y vuelve en el tiempo de espera.

¿Podría ser esto un error en .NET? (esto sucede para otros programas, archivos por lotes, etc.)

Respuestas a la pregunta(2)

Su respuesta a la pregunta