I don't get any freeze with your code. However, it may run faster if you use the immediate assignment
fVarPut[\[Theta]_?NumberQ] =
Variance[E^(-r T) Ramp[
K - S E^(\[Alpha] T + \[Sigma] Sqrt[
T] (Z + \[Theta]))] E^(-\[Theta] (Z + \[Theta]) + \
\[Theta]^2/2)];
instead of the delayed assignment :=, because with delayed assignment Mathematica has to recalculate the Variance formula every time fVarPut is called.