Yes, locks based on Monitor
in .NET are recursive, and counted.
From the docs for Monitor.Enter:
It is legal for the same thread to
invoke Enter more than once without it
blocking; however, an equal number of
Exit calls must be invoked before
other threads waiting on the object
will unblock.
Whether this is a good thing or not is up for debate...