The correct answers are as follows:

1) Why does fetching the ProcessID in the second script not work ?

Because the WQL query was optimized to return only the name, like this:

Select Name from Win32_Process

If you wanted the ProcessID, would have to use Select * or Select ProcessID

2) If fetching the ProcessID in the second script doesn't work, why does fetching the Handle in the first script work ?

Because Handle is a "special" property of the Win32_Process object - its what is called a "key" value ... and key values always get returned with query, no matter what you specify.