1. $encode is allowing multiple padding switches to be specified, and uses them in a hierarchy regardless of the order used.
This is true of most commands/identifiers with switches. Few commands/identifiers check if invalid combinations of switches are specified or if non-valid switches are used. They depend on the scripter to know what they are doing. While I have made a few changes to these identifiers based on your feedback regarding invalid combinations of switches, I am not inclined to keep doing this just for these identifiers.
2. $decode is ignoring the 'pnz' switches or the lack of a padding switch, and instead attempts to find all 4 padding types at the end of the decrypted string.
This is intentional. You only need to specify the padding method with $encode().