If we have a tied def, the tied use should also be live in the same live interval. The exception is that the use may be undef, in which case the def is dead, but we don't appear to enforce that tightly. For the moment, check only the non-undef case.
The need to not check physical registers here bothers me. I added this because without it, test/CodeGen/X86/segmented-stacks-dynamic.ll fails. However, I can't claim to understand why it's necessary.
From reading the existing code, I believe this is the intended invariant. I am not overly familiar with this code (or at least I wasn't until recently), so I would appreciate a careful review.