The canonical way to represent the result of casting &SymRegion{$x} to bool is ($x != 0), not $x. In fact $x is an ill-formed SVal (when`$x` is a loc-type symbol) and it gets caught by D48205. Fix the cast procedure.
Because our cast code is a spaghetti, the code that was fixed was in fact executed very rarely, because there's a duplicate guard in evalCast() that's written correctly. But when evalCastFromLoc() is called directly (eg., from CastRetrievedVal()), this becomes a problem.