Hi Stephen - I wonder if the time gap between Query and Acquire could be the problem? Also, and I'm sure you've checked this, but is there any chance that process1 is not in possession of lock1 while it is using cred1? For example, could process1 terminate, thus releasing lock1, but leave the app still logged in as the account in cred1?
How about ditching Query Lock and just using Acquire? Only if the process acquires the lock, is it allowed to get the credential. The process must retain the lock until it logs out.