That's sscli, not the .NET BCL. I think they have different memory models.
My guess is the MemoryBarrier was placed between "int ret = address"
and "return ret" to ensure the two instructions aren't reordered with
respect to each other.
One problem I see with that is that the read from "address" may not see
writes from other threads.
As Vance Morrision describes the .NET 2.0 memory model  "reads can only
move earlier in time, but never past a write", and "a write cannot move
past a read from the same thread to the same location"; it seems, at least
in .NET 2.0, there could be no reordering with respect to each other.