I took a peak at the .net 2.0 source code, and it looks like you can call ToArray after the stream has been closed. So you could do ToArray first, then get the length of the Array.
But like you said, you can also move the variable into the using block.
The one thing I would worry about reading the length before closing the stream is whether everything has been flushed to the stream before you close it. I couldn't really work that part out from the source code.
Almost all the other functions and properties throw an exception if the stream is closed, probably because they are all part of the implementation of stream and so are designed to be consistent with the implementation of other Streams.