Great minds think alike. I'm smelling things here..and other places.
I think it's always best to post a diagram along with analysis.
I copy the game and paste in winboard - it's a piece of cake to
copy & paste a diagram from there.
So your post can read thus: ('ve not changed a word).
An earlier opportunity that comes to mind is 17...Nb4
18.Qc3...Nd3. White cannot play Rd1 as Nxf2 wins,
and any other rook move loses to 19...Rc8.
Therefore white must try 19.Ne5,
but after 19...Nxe5 and 20.Qxe5 (20.Rxe5 loses to Rc8 and Rd1+),
21...Nc4 22.Qe2...Rc2 leaves black with a definate edge.
(and you catch wee erros with that last bit - ...Rc2 looks like a typo).