The purpose of a string subtype is to restrict the values to which a string can be set, to a pre-specfied (in the type) set of allowed values.
I agree your example should not raise a null pointer exception.
I wonder, though, if the "allowed values" should include some way to specify "null" as an allowed value?
It's true that before the value is set, it has this value. So, it would sort of seem OK to allow setting it back to this value. But I guess one could argue that the whole point of the subtype is to specify restrictions on setting, and that therefore, having that functionality include prohibiting setting it "back" to null might be valuable.
And, there is also the matter of specifying "null" as a special value, and not the string n-u-l-l, if we allowed this in the set of allowed values.
I guess I feel this is a "corner case", and that no one has asked for "preventing" setting the value to null, so I'm ok with either approach.