This is because the first parameter on the WaitProcess is not the index but is the timeout. By leaving the third parameter blank (the third parameter being the index), what you are effectively doing is saying find any process with the name "putty", regardless of index, and wait a maximum of 2 milliseconds.
Now, in addition to that, I would not call the "exists" method right off the "PuTTY" window either as you may end up with other undesirable effects.
Here's how I'd do it.
<font class="small">Code:</font><hr /><pre>dim puttyprocess
set puttyprocess = Sys.WaitProcess("putty", 10000, 2)
if puttyprocess.Exists then
set bPass = puttyprocess.WaitWindow("PuTTY", "*", 1, 10000).Exists
End If</pre><hr />
This will first of all will bypass anything if the specified process does not exist. Then, if it does exist, will wait up to 10 seconds for the designated window to Exist and set your bPass variable to either true or false accordingly.