@ypercubeᵀᴹ It's a really interesting discussion though. Consider: the same plan with a seek versus the same predicate in a filter. How many times is newid() evaluated in each case?
The general answer is that it is not guaranteed either way, and in particular the optimizer provides no guarantees about the timing or number of evaluations of a scalar function. These things are best avoided completely by making it explicit (perhaps by putting the desired value of newid in a variable first).
In case that's not clear: seeking to the value obtained by calling newid once is not the same as filtering each row after a scan if we call newid for each row.
Making things like GETDATE runtime constants can be seen as an attempt to resolve that ambiguity for a common class of query in a way that is likely to surprise people the least.