Hi,
the reason why with no force you have no penalty is that in that case plumed computes the variable (and ask the atoms to lammps) only when you print it (every 50 steps in your case). If you try with PRINT STRIDE=1, you will probably get a similar overhead with/without restraint.
Concerning the overhead: it is due to the fact that you are asking lammps too many atoms. I think Gareth was working on some trick to use sort of neighbor list also on these kinds of variables, so as to only ask for the relevant atoms at each step, but I am not sure this is already in the public version.
Hope this helps,
regards,
Giovanni