Let's have a mapping targeted to assignment with a range defined (matching assignments with subtype X).
Let's have a user with an assignment of subtype X, i.e. within the range of this mapping.
Let's assume the condition for this mapping evaluates to false.
On user recompute, the mapping evaluator simply ignores the (whole) mapping, leaving the assignment of subtype X on the user. This is (most probably) a bug. The assignment should be removed.
The fix will be to evaluate such mappings even if condition is false->false (old->new). In such cases, the expression itself will not be evaluated, but range will be checked and any extra values will be removed. (The current behavior can be established by changing range to empty set in such situations, probably by copying the condition code into range evaluation code.)
We do not plan to fix this in 4.0.x, though, as it might present an incompatible change for some deployments.