1) Does this apply to all type tests, or only in leaf procedures?Type tests on expressions (e.g. array elements and individual fields of records) are handled correctly in IS expressions. Type tests using CASE statements can only be performed on (qualified) identifiers, not expressions.
2) Is dereferencing via p^ considered an expression?