That's a bug, allright - while "{}"-constructor, "."-member and "[]"-index-access throw error, AddReplace() silently does the wrong thing. I tried it both fw3 and fw5. Here is "clean room" reproduction ("val" is undefined):
BSD> d = {k: val}
Use of uninitialized variable. (runtime error &he9) in $LIVECOMPILE(102)
BSD> d = {}
BSD> d.k = val
Use of uninitialized variable. (runtime error &he9) in $LIVECOMPILE(93)
BSD> d["k"] = val
Use of uninitialized variable. (runtime error &he9) in $LIVECOMPILE(95)
BSD> d.AddReplace("k", val)
BSD> ? d
k: <bsTypedValue: >
BSD> ? "val=" d.k ", type=" type(d.k)
val=<bsTypedValue: >, type=