1) Specifying such a rule is safe if it's known that the firewall would
only accept packets with a particular header type if there is no proceeding
header.
No header following the one that the firewall is looking at, you mean?
Well, if the firewall doesn't understand the shim header, how would it know
whether other headers follow the shim header? (Next header field isn't
necessarily in the same place in all headers. The prime example is ESP where
it actually follows the "next" header data.)
And if the firewall does understand the shim header, it can obviously
interpret the TCP/UDP/other header that follows so there is no reason for the
firewall to behave in the way you mentioned.