I guess my concern is why the invalid open returned true.
Because the (piped) open succeeded. It found and successfully ran the prince executable.
The problem is that you are attributing the failed close to the failure to find the non-existent file; which is wrong.
What you are attempting to close is the pipe to the prince executable; which fails because the executable closed its end of the pipe, when it terminated because it couldn't find the file.
Bottom line: You cannot close the pipe because it is already closed. The confusion arises because you are attributing the failed close to the failure of the file to exist; rather than the fact the the pipe was already closed.