Checking IS NEW is a problem. Can you replace it with checking the value of some attribute that is undefined when an object is new and defined afterwards, so that instead of checking IS NEW you would check If Temp.SomeAttribute is equal to the value
If you don't have such an attribute you can create one - don't show it on forms but add a rule that would initialise this attribute when an object is new: If Temp.SpecialAttribute IS NEW Temp.SpecialAttribute='Some value' and then check for Temp.SpecialAttribute='Some value' in READ PROTECT rule.
Are you using Derby? If so, CHARS_LEFT would be OK.
You see, we are now adding read protection conditions to every query automatically, so that we can know the valid count after executing the query. The problem is that not all conditions that can be used in rules, can be used in queries - for example, such conditions as IS NEW, WAS CHANGED, some functions cannot be used in queries. When they cannot, we revert to the old way of dealing with read protection (which produces invalid count).