These are just my own thoughts on good property practices to improve data veracity:
Properties with a conditional meaning (i.e. their meaning is instance specific) are a bad data smell which encourages lower data veracity by removing possibilities for constraint application.
Properties with ambiguous meaning (i.e. can be interpreted multiple ways in the same instance) should probably be qualifiers or split and constrained to narrower domains. It may be obvious to a human what the meaning is, but to a machine the property should be clearly defined.
many→1 properties (statement on many items) are preferable to 1→many (many statements on 1 item) properties to avoid bloating individual items.
Property constraints should drive the data, not be driven by the data. In other words, constraints should be constraining to flag issues in the model instead of being made more accepting to accommodate a bad model.