I think 21. ...a6 would be better. The computer may response with: 22. Rxb7? Rd1+ 23. Bf1 Rxf1+
Solid Opening Defense Gone Awry: What Went Wrong?

Tactically, your play was quite okay, except for your mistake at the end that you've correctly spotted.
From a strategical point of view, what strikes me is your tendency to ease the tension to your opponent's advantage. I've seen it 3 times in this game :
- after 5.d3 exd3?! 6.cxd3, your nice advanced pawn, which granted you a space advantage has disappeared ; I think I would have played 5...c5 maybe
- after 13.e4, why not consider something active like 13...Qb6 or 13...Qa5?
- after 14.dxe4, 14...Qa5 might be worth a look, though in this case, trading on the d-file probably incurs no disadvantage

hicetnunc
Thanks for the postmortem. I spend a lot of time working on tactics. I still have my good days and my bad. And I'm still trying to work those small errors out of my game.
The hard part, for me, about moving up in skill levels, is that the tactical shots that would just be gifted to me at the 1500-1800 level just aren't there at the 2000-2200 level. I have studied a bit about tension, and I see grandmasters use it well to their advantage. In my wins, I do too, sort of =/
Thanks for giving me a concrete point of study that I can review. I appreciate it.

Tajamoen
Yeah 21. ... a6 does look like an interesting move, especially compared to what I played. I wonder what the computer would have played; I wonder if it would have taken the bait?

There were better positional moves earlier on, but the hole just created by 16. a4 should have been exploited by 16...Bb3. Also, 17...Nd7 needed to be played. Taking the knight on c3 and opening the B-file is dangerous here since the bishop on g2 and later a rook on b1 will spell trouble for Black.
It's interesting to see strong GMs write about tension. Kasparov's GM Predecessors books are apart from anything else a great analytical series. In one of his books he says something like "you shouldn't usually release the tension unless there's a very specific reason for doing so". So keep the tension, see if you can turn it to your advantage. Often players release the tension because it's too much hard work to keep it and work things out, but that's not a good way of going about things.
The computer is the first person to throw a King's Indian Attack my way, so I figured I respond with a reverse King's Indian Defense. It seems simple enough, and I'm pretty sure from just looking at the position that after 10. Nd4 I have achieved an equal position, or a "+/=" at the very least, with development being equal and Black having the initiative. However, I'm not sure if 10. ... Nc7 was the right move.
Things got better and worse during the middle game. I felt like the computer's 16. a4 gave me an opening to attack, as it weakened the b3-square. I wasn't sure whether to play 16. ... Bb4 (which I did) or 16. ... Bb3 at the time? Next thing I knew, half my pieces were inactive and then I blundered 20. ... Bc4?? 21. Rb1! Ba6 22. Bxa7 1-0. What adjusts can be made here?