Can you implement IDisposable? I had this exact problem but calling .Dispose() after each use worked. I now have 0 'ghost' WinSCP processes :).
Note the use of
usingin all .NET examples for WinSCP .NET assembly.
One example out of many: https://winscp.net/eng/docs/library#example