When we can't find a valid type for a dynamic value (for instance we just have a void * and can't compute anything for it) we used to try to hand out a dynamic value that "behaves like the static value". That mostly works, but getting something to behave like ValueObjectConstResult without being it didn't work - for instance AddressOf fails for this DynamicValue.
The comment before this section of code mentions that we might should return an invalid dynamic value instead, so that the static one would get used. I switched over to that, and I just needed to fix up a few cases where we were handing out a dynamic value w/o making sure it was valid first. That ends up being much simpler than trying to get this ValueObjectDynamicValue to be "just like" ValueObjectConstResult.
It would be nice if ValueObjectDynamicValue had a IsValid method that returned the result of its Status attribute. Without reading the commit message, GetError doesn't tell us much about what we're trying to achieve here.