Brady so far accounts for 1/6 of each of his opponents games. There is no getting around that.
It really doesn't matter how you spin it - Brady has lit up everyone he has faced so far. The flip-side of that coin is that every team he has faced so far has had at least one game with 3+ TDs allowed. Therefore, every team's defensive YPA allowed is worse than it would be had you excluded what Brady has done, and the SOS Brady has faced is therefore less than what it would have been had they not played him.
There is a way around the chicken-egg problem. It's called iteration. It's pretty darn cool. Let me walk you through it and try to explain why it does indeed factor out the situation you're concerned about.STEP 1: compute an unadjusted rating for every QB and for every defense.
At this point, Brady's rating is too high (because it hasn't been adjusted to account for the weak defenses he's played). Meanwhile, assuming they've faced a more-or-less average collection of QBs aside from Brady, the Bills, Jets, Cowboys, etc have defensive ratings that are too low (because they haven't been adjusted to account for the strong QBs (i.e. Brady) that they've faced).
STEP 2: adjust every QB's rating based on the average defense he has faced.
At this point, Brady's rating is likely closer to being "correct," but is probably too low because we've used the STEP 1 defense ratings, which (probably) underrate the defenses Brady has faced. This is your main point: that we have overcorrected Brady's numbers. And if we stopped here, we would indeed have overcorrected (probably).
STEP 3: now adjust each defense's rating based on the average QB it has faced.
Again assuming the Patriots' opponents have faced a fairly average collection of QBs, except for Brady, this will improve the rating of each of those defenses
by the full amount by which Brady is better than average.
At this point, it's pretty subtle trying to figure out whether Brady and/or his opponents have been over- or under-corrected, but the next steps will take care of it.
STEPS 4 through 1000: repeat steps 2 and 3 over and over again. Adjust Brady again based on the new defensive estimates, and adjust the defenses again based on the new QB estimates. Eventually, the numbers will stop changing.
Let me show you how it works specifically in this case:
Brady's nominal AYPA is +3.298 yards per attempt above average. That's what the raw stat line says.
Nominally, the defenses he has faced look like this:
Jets: -1.61 (<---- 1.61 yards per pass WORSE than average)
Chargers: -.57
Bills: -.00
Bengals: -.54
Browns: -.73
Cowboys: +.73
Now, if you take a weighted average of those six numbers, weighted by how many attempts Brady had against each team, you get -.36. So in the first pass, we'd decrease Brady's rating from +3.298 to about +2.94. [NOTE: if we stopped here, your criticism would be dead on. That's why we're not stopping here

] Meanwhile, the defenses that faced Brady get a collective boost. Here's where they stand after one step:
Jets: -1.48
Chargers: -.40
Bills: +.97
Bengals: +.28
Browns: -.55
Cowboys: +.31
Note how all the defenses that played against Brady are better than they appear (except the Cowboys, who have faced Bulger, Edwards, Green, and Grossman). This is your point moleculo, and it's a good point, which is why we're not finished yet.
So after we re-adjust Brady based on those revised defensive numbers, Brady moves back up from +2.94 to +3.18. Then we just do the whole thing over and over and over again. As the process moves on, Brady's ratings do the following:
3.30 ---> 2.94 ---> 3.18 ---> 3.04 ---> 3.14 ---> 3.07 ---> 3.12 ---> 3.09 ---> 3.12 ---> 3.11 ---> 3.12 ---> 3.13 ---> 3.13 ---> 3.13 ---> ...
And here are where the Pats' opponent's numbers eventually settled in:
Jets: -1.26
Chargers: -.27
Bills: +1.19
Bengals: -.21
Browns: -1.20
Cowboys: +.60
Note that each of those defenses has been adjusted
by the full amount that the QBs they've faced are better or worse than average. For example, look at the Bills.
The Bills have faced:
Brady (+3.13)
Romo (+1.63)
Cutler (+.84)
Big Ben (+.54)
Pennington (+.12)
The weighted average of those is +1.20, which is exactly the amount that the iteration moved the Bills' rating. Remember, the stat line said the Bills are exactly average (-.00). After iteration, we find that Bills' schedule has been 1.2 better than average, so they end up with a rating of 1.2, which is the number we're ultimately using to adjust Brady.
Here is another way to see it:
The raw stats said Brady's schedule was .36 worse than average. After iteration, we figure that it's .16 worse than average. So the iteration bumped these teams up by a collective .20. Let's examine where that came from. For starters, Brady is 3.13 better than average. Now, if you go look at the *other* QBs faced by teams faced by Brady, you'll find that they are, on (weighted) average, about .38 worse than average (I can list them and their ratings if you want). Since about 1/6 of the schedule was against Brady, he bumped their ratings by about 3.13*(1/6). Meanwhile, the other QBs, which account for 5/6 of their collective schedule, bumped them down by about .38*(5/6). Since 3.13*(1/6) - .38*(5/6) is just about .2, that's why Brady's schedule got a boost of .2 for playing against Brady, along with a collection of other QBs that were a little below average.
It's all extremely self-referential (the chicken-egg thing your referred to earlier). It is, in a sense,
infinitely self-referential. But it all balances. I think it's pretty cool.
EDIT: Just to pre-empt a potential hijack....
I used AYPA in the above example, but all of the above is agnostic about whether AYPA is worth anything or not. [For the record, I happen to like it, but I don't have as much energy as young Chase, so I'll let him answer those things]. This post is only about the SOS adjustment. You could do the same with (almost) any stat.