As I said in my comment, cfd.exe < inputfile.in does not pass any input argument to the executable. It's a completely different mechanism, and proc.StartInfo.Arguments = 'C:\inputFile.in'; is not equivalent to that at all. The .Net equivalent would be
streamreader = System.IO.StreamReader('C:\inputfile.in');
With regards to &, I was too focused on the windows side and forgot that it's a matlab argument to mean that system should return immediately without waiting for the process to finish. So, if you want matlab to continue only when the process has finished then don't include that final &.
As to killing the process, if I understood correctly, you shouldn't have to do that as your program accepts a quit command that will tells it to terminate. It's a lot cleaner than killing it.