Ok, essentially this is why implicit eager locking is disallowed with deadlock detection. See ISPN-518 for details, especially the discussion thread linked on the JIRA.
Using the lock() API is an explicit form of eager locking and causes the same issues. While we have trapped and outlawed configurations where deadlock detection and implicit eager locking are both enabled, we haven't trapped the use of the lock() API with deadlock detection. I've created a JIRA for this. See ISPN-596.