Thanks for the pointers. This is what I came up with:
(defun abradd-agenda-tags-inherited (tags)
(let (beg end m)
(org-back-to-heading t)
(setq beg (point)
end (progn (outline-next-heading) (1- (point))))
(goto-char beg)
(and
(not (member tags (org-get-tags-at)))
end)))
I copied mostly from org-agenda-skip-if. It isn't very versatile, but works for now.