No, I would call the behaviour undefined because its purpose is to report the results of the last executed if statement. Of course, the assumption would be "the last executed if statement within a script process call sequence" if not within an individual alias itself, otherwise you have a really weird scope leak that makes no practical sense to a programming language. In other words, it might be callable from anywhere, but I would expect $v1 to be reset when the call sequence / script finishes. It's undefined because sharing $v1 across script processes doesn't really make sense...
So, the following is
valid because the two commands execute in the same sequence / process:
//if (1) { } | echo -a $v1
The following is
not valid because the timer executes in a separate script "process" or call sequence:
//if (1) { } | .timer 1 1 echo -a $!v1
IMHO this is expected behaviour. It works like many other stateful identifiers in mIRC. The behaviour of $v1 across multiple script processes should be considered undefined.