Jonathan,
nsv_dict unset triggers an error, when the flush happens for a different key (mostly package_ids), but not for different dict-key. If you try to flush for a new parameter of a new package, the exception is raised.
See:
% nsv_dict set ad_param 1001 k1 v1
k1 v1
% nsv_dict unset ad_param 1001 k2
k1 v1
% nsv_dict unset ad_param 1000 k2
no such key: 1000
Have you cherry-picked the single change? Then you are probably missing the change [1].
all the best
-g
[1] https://cvs.openacs.org/browse/OpenACS/openacs-4/packages/acs-tcl/tcl/defs-procs.tcl?u=20&r1=1.81.2.30&r2=1.81.2.31