 <p>OK, don't feel like leaving this open, so my "answer" is this: First, (sorry) Bengie and Hans just don't seem to understand that sure enough, a reentrant lock is malfunctioning. Second, I suspect that this is happening because of my use of reflection; somehow the context information they use to realize that the lock is being re-locked by the same thread is apparently being impacted.</p> <p>I'm going to fix this by changing my code to not hold the lock during the initial call; basically, I won't try to acquire this lock reentrantly.</p> <p>Others who run into this thread should be warned: as far as I can tell, I'm encountering what can only be a .NET bug. And it isn't very hard to provoke, either. </p>