Here is a description of each and my opinion of the implications on the cases mentioned:
If this property is set to true, then after the entry was successfully processed, a new entry would be created.
This property holds the number of times the system should try to successfully process this entry. If the maximum number of attempts is made, and the entry is still unsuccessfully processed, the system will treat the item as a failure.
From what I can see, this counter is incremented after a successful queue process when pyRetainOnSuccess is set to true.
In terms of the use cases mentioned:
Neither of these cases I believe would consitute a successful run and as such would not increment pzSuccessfulruns and the check against pyRequeueonsuccess would not occur. The first would count against the number of attempts for pyMaxAttempts. I would assume the second cases effect on Max attempts would depend on how it is caught and handled.