What you are seeing is what happens with anything that becomes “deprecated”.
There are these high-level steps:
(1) a decision is made that something as it currently stands should be modified
(2) in the next incremental release the target of change is formally deprecated
(and its use results in the Warning: xyz is deprecated, use betterway)
(3) in the following release at a larger step v"A.b.n" → v"A.c._"
the change has become part of the language
(and trying to use the obsolete way results in an Error)
As @JeffreySarnoff indicated, the fact that randn((1,2)) does not throw an error is a “bug”, it was apparently not deprecated when it should have been.
The main reason rand((m,n)) was deprecated is probably because the first argument of rand usually specifies a sample set from which you want to draw a random object. For example, it would be confusing that rand([1,2]) follow a bernoulli distribution while rand((1,2)) is an array of random numbers in [0,1].