sp_GetAppLock slow performance unusual behaviour
Try adding SET_XACT_ABORT ON to the stored procedure to ensure the transaction is rolled back following termination due to an attention request. This is a best practice for procs with explicit transactions. 

A scenario that could cause the symptoms you describe is that the proc execution timed out during execution due to blocking on the table.  When a client timeout occurs, the client API cancels the proc by sending an attention event to stop execution.  This cancels the executing proc but does not roll back the transaction if SET_XACT_ABORT OFF.  The transaction will remain open until the connection is closed and reused (in the case of a connection pool), the connection is physically closed, or an explicit rollback or commit is issued on the same connection.

This is especially nasty with persistent (non-pooled) connections that don't properly clean up after an exception because all subsequent work performed on the connection is unwittingly done under the context of the open transaction.