Turns out the issue isn't exactly a "bug" but more of a design choice.
Container text replacement for briefings was happening right after variable replacement, which is long before any briefing SEXPs are evaluated.
I moved container text replacement to take place for a given briefing stage after the stage's SEXPs are evaluated, and now the behavior is what you expected.
Note that there is a warning for Stage 1, because Capricorn is not in the Traitors map. The later failed replacements don't result in warnings because BriefingPilotList is empty at that point. We can add warnings for text replacement failures with empty maps/lists, if you'd like.
BTW, after replacement, Stage 2 wingman names are Zodiac signs, since those are the keys of Traitors.
While I'm working on text replacement, are there any other cases where container replacement should happen at some point other than right after variable replacement? Debriefings, maybe, and presumably only if the debriefing stage is actually added?
I'll update the builds once these questions are sorted out.
EDIT: Also, could a FREDder reasonably want to use '&' in player-facing text? IF so, should we pick a different character to be the container delimiter? Maybe '@'? It would be ideal to avoid spurious warnings when running debug builds just because the FREDder wanted to use an '&' in in-game text.