TLDR: Stockfish analyzed to quiet positions resulting from the position you posted and then statically evaluated them to be at least +3.15 evaluation for white assuming best play from black. I think this is counterintuitive to you because you stopped before getting to quiet positions and statically evaluated too early!
Explaining How Engines Work
I'll take the approach of explaining a bit about how the engine works internally, how that differs from the analysis you provided in your post, and how those things taken together explain why it chooses this line and why it seems counterintuitive to you. Stockfish (and every engine I know of) does two main things: 1) search, where it plays out possible lines/variations, and 2) evaluation, where it assigns a numerical value to the position in a search. The evaluation method used is called "static evaluation", which is basically a mapping from the board state to a score without regard for what the next move or moves could be, or even whose turn it is. It involves things like counting material and also assigning numerical values to positional features like how many squares your pieces can go to and a vast array of complex material/square patterns. So for example if we have 1. e4 d5 2. exd5 * and the engine is asked to do a static evaluation in that position, it would see that white is a pawn up, and assign an evaluation of about +1 for white; a version of this static evaluation function is available online and that is what I have linked above. However, we know that +1 is incorrect in this position, because 2...Qxd5 is coming, after which material is equal again. So, it is not enough for the engine to statically evaluate the position; in fact it must choose the right moment to statically evaluate the position, otherwise it will make these kinds of mistakes. So when is a good time to statically evaluate, and when is a bad time? In human play we call the positions in which static evaluations are reasonable as "quiet" positions. In other words, when all tension is removed, when all pending captures are completed, when all tactical or forcing sequences are resolved, we arrive at a quiet position, and that's when you should statically evaluate the position. When the engine does this, it is called quiescence search.
You stopped at 27. Rxd7+ and did your own form of static evaluation, which was to count material. However, the engine realized that this is not a quiet position; indeed, there are still forcing tactical lines to concretely calculate here that involve checks, captures, threats, forks, etc., and other answers have provided that analysis. In every case, after the engine explored all those lines until it got to quiet positions, only then did it statically evaluate and decide that white is better by about +3 with best play from black.