I've been playing with the anonymous delegates in C# 2.0 and from all my tests, it seems that they are full lexical closures. They certainly aren't as easy to use as blocks in Smalltalk (you have to declare the delegate types and do casts at various times), but they do capture the local variables even when the method containing them returns.You can even have variables accessed by two delegates in the same method still share the same variables after the method returns. Calling the method again creates new variables which are distinct from the first call.
The one thing missing from C# closures which Smalltalk has is non-local returns. In Smalltalk, a return from a block causes a return from the whole method. This doesn't work in C#. Returning from a delegate returns back to the method and continues from there.
All said and done, though, I'm impressed that Microsoft has done as good a job at it as they have.