I feel a little foolish. I checked the WIKI and it says "Note that it just appends a new header entry to the output header list." but doesn't say anything about the behavior you describe. I guess I hadn't noted this until I started moving things around so that they make more logical sense in my config files. I had thought add_header to be cumulative from parent to child when the headers were different (i.e. Cache-Control in one block, X-UA-Compatible in another).
I didn't mean to waste your time with this. I know this is a huge project and I very much appreciate your hard work.