You are correct about the behavior of the "Where" clause.
The "Where" clause was intended for distinguishing among records with a FIXED discriminator column. It will not work for any column whose value can change ... nor was it supposed to.
The "Where" clause was designed to separate State codes from Shipping codes when both such codes resided in the same table. A State code never becomes a Shipping code (nor vice versa).
However, any object can be active or inactive and switch between the two.
Perhaps our documentation is unclear on that point - I'm forwarding this to our docs guy.
You can teach your managed list to remove an inactive object. That is standard ManagedList coding; please check with support if you need to know more.
There are other more challenging issues associated with "logical delete" operations such as are likely to be associated with your "inactive" flag. I don't want to anticipate those now :-) but I have some guidelines when you are ready.