Behaviour of frozen/2

I have observed some difference in behaviour between SWI Prolog and SICStus Prolog concerning frozen/2. Sometimes, frozen/2 reports more goals as frozen on a variable than expected (first example) sometimes less (second example below). In the first example, I did not expect when(nonvar(X), print(f)) to be reported as frozen on Y and in the second I did expect when((nonvar(X),nonvar(Y)),print(e)) to be reported as frozen on Y. I guess in the second case, SWI Prolog first waits on X before waiting on Y.

Welcome to SWI-Prolog (threaded, 64 bits, version 9.0.3)
...

?- when((nonvar(X);nonvar(Y)),print(e)),when(nonvar(X),print(f)), frozen(Y,G), portray_clause((frozen(Y,p6(X,Y)) :- G)).
frozen(A, p6(B, A)) :-
    when(nonvar(B), user:print(f)),
    when((nonvar(B);nonvar(A)), user:print(e)).
G = (when(nonvar(X), user:print(f)), when((nonvar(X);nonvar(Y)), user:print(e))),
when((nonvar(X);nonvar(Y)), print(e)),
when(nonvar(X), print(f)).

?- when((nonvar(X),nonvar(Y)),print(e)),when(nonvar(X),print(f)), frozen(Y,G), portray_clause((frozen(Y,p6(X,Y)) :- G)).
frozen(A, p6(_, A)).
G = true,
when((nonvar(X), nonvar(Y)), print(e)),
when(nonvar(X), print(f)).