The 2017 LRM states that:
An object handle can be declared rand, in which case all of that object’s variables and constraints are solved concurrently with the variables and constraints of the object that contains the handle. Randomization shall not modify the actual object handle.
However, there’s this issue that dates from 2006 which states that:
Section 13.3 “Random variables” is not specific that only “rand” variables in a “rand” handle class are to be randomized. Also, it’s not clear if “rand” variables in non-rand handles and structs are to be randomized.
where section 13.3 is now 18.4. Apparently this is an LRM bug that needs to be fixed. However, it has survived through the 2009, 2012, and 2017 updates.