I’m not sure I fully understand your setup nor am I an expert at masking and convolutions, but my attempt at answers would be

that depends on what you are doing, but as soon as you have bias, the masked off bits will have that part added even if the inputs are all zero.
I would imagine that there are efficient and less efficient ways to compute the mask. For example I might try to maxpool the lower-level mask appropriately if you want a mask that is “all outputs where an unmask input arrived” or you could use a negative mask (i.e. -1 at input, 0 for non-input) and maxpool that to get “all outputs where only inputs arrived”. Then you’d have to see if you come out with the right sign at the top. That way it should be relatively efficient to propagate the masks.
As the loss doesn’t depend on the bits you “masked off”, the gradients should be zero for those parts of the input automatically (unless you have NaNs, but then you’re screwed anyway and should adjust your inputs).

I hope this helps you and look forward to hear about how it worked out for your project.
Best regards
Thomas