A few use cases:
(1) This, as expected, returns (almost) immediately:
f[x_?NumericQ] := Evaluate[(Pause[1]; x)]
Plot[f[x], {x, 0, 1}]
(2) This takes forever:
f[x_?NumericQ] := (Pause[1]; x);
Plot[f[x], {x, 0, 1}, Evaluated -> True]
(3) This is much faster than (1):
f[x_?NumericQ] := {(Pause[1]; x), x x};
Plot[f[x][[1]], {x, 0, 1}, Evaluated -> True]
(4) This returns immediately ... with a "wrong" plot:
f[x_?NumericQ] := {(Pause[a = x + 1]; a), x};
Plot[f[x][[1]], {x, 0, 1}, Evaluated -> True]
(5) While this, as expected, returns immediately, with the "right" plot:
f[x_?NumericQ] := Evaluate[(Pause[a = x + 1]; a)]
Plot[f[x], {x, 0, 1}]
I would like an "authoritative" explanation of cases (3) and (4) ... the rest I think I'm able to understand, but posted for completeness, and to get a complete answer that could be useful for others too.