I think Add possibility to "knockout layers" to non-copper zones (#3983) · Issues · KiCad / KiCad Source Code / kicad · GitLab would be an adequate solution for the problem. You would add “F.Mask” as a “knockout” layer to a mask layer zone, with some clearance. It would draw zone fills around all copper which in the mask layer means taking off the mask everywhere except on copper. Pads would of course be already handled by having Mask activated in the pad properties.
You can add a thumb up for that issue to vote for it.