When you need to work with constraints such as these, which need to be expressed in multiple lines, and negations of them, I think you're moving into the world of inference and truth maintenance:
http://blog.athico.com/2010/01/drools-inference-and-truth-maintenance.html
i.e. Your rules could be something like:
rule "Determine presence of non-P objects" when
$c: CustomType()
exists Object(this != objectP) from $c.collection
then
insertLogical( new ContainsNonP($c) );
end
rule "There are some non-P objects" when
$c: CustomType()
exists ContainsNonP(customType == $c)
then
...
end
rule "There are no non-P objects" when
$c: CustomType()
not exists ContainsNonP(customType == $c)
then
...
end
Note that the final rule above may activate if the first rule has not yet activated. If the order of activations is important to your rules, you may wish to define some salience.