I'm considerably more familiar with integer programming than with constraint programming, so what I'm about to say is personal opinion. I think one key characteristic of a "good" CP model is one that exploits global constraints. The best known global constraint is, I think, the "all different" constraint.
There is a possibly subtle implication to this. MILP solvers differ in their internals (what cuts they apply and when, for example), but they all work from models containing the same basic components (linear constraints, linear objectives, integrality restrictions, variable bounds). There may be some differences at the margin, regarding whether they inherently support SOS1 and SOS2 constraints and logical implications (and things like second order cone constraints, if you need to work with quadratic models), but I suspect that most commercial or high-quality open-source solvers have a pretty common set of model elements they can handle. So, for the most part, a "good" MIP formulation is a "good" formulation regardless of which solver you are using.
In contrast, I don't think there is a particularly large set of global constraints understood by all major CP solvers (although, somewhat ironically, I would bet that they are all similar in having "all different"). So, for instance, in developing a CP model for solving cutting stock problems, you would want to look for global constraints related to rectangles not overlapping. I don't know whether every good CP solver has them (maybe: similar constraints arise in resource scheduling), and, if so, I don't know whether every good CP solver supports non-overlap in the same way, and with equal efficacy.
So this is my long-winded way of saying that what makes a "good" CP model might be more solver-dependent than what makes a "good" MIP model is.