Thank you very much Wolfgang Kaiser!
However, another issue has come up. What if the user created the SDE using operating system authentication, rather than explicitly specifying the user and password? Implementing your check, we are now getting false positives for inadequate credentials when this is the case.
I looked at the DatabaseConnectionProperties object in the debugger, and even though the connection was created using OS authentication, the AuthenticationMode property is still DBMS, rather than OSA.
So, if the AuthenticationMode property doesn't change between SDE connections created with user / pass and those created with OS authentication, how can we distinguish between the two? I don't want to tell users using OSA that they have to enter credentials.
EDIT: To be clear, that AuthenticationMode property is ALWAYS DMBS, even when the connection was created with operating system authentication (OSA). Is this another bug that is going to be fixed in 2.6?
I also removed the STA thread portion of my code and wrapped the Geodatabase instantiation in a QueuedTask. Even so, an uncredentialed connection results in an indefinite hang.