End up going with .NET objects.
$psi = New-Object System.Diagnostics.ProcessStartInfo
$psi.CreateNoWindow = $true
$psi.RedirectStandardError = $true
$psi.UseShellExecute = $false
$psi.FileName = $EXE
$psi.RedirectStandardInput = $true
$psi.WorkingDirectory = $PWD
$process = New-Object System.Diagnostics.Process
$process.StartInfo = $psi
[void]$process.Start()
do
{
$line = $process.StandardError.ReadLine()
$line | Tee-Object "my.log" -Append
}
while (!$process.HasExited)
$line = $process.StandardError.ReadToEnd()
$line | Tee-Object "my.log" -Append
$process.Close();