Why does combined bake look different from render?
Well, I've been searching for an answer to this question for literally years, and just a few hours after I post a coherent question, I stumble upon the answer.

The baked texture can't imitate the roughness of the original shader. I'm using a roughness of 1.0 for the diffuse shader, but when I bake it, it has to be piped into an emission shader.

When I turn the roughness of the diffuse shader down to 0, it perfectly matches the baked texture.

My only thought is that roughness has something to do with the viewing angle, and the baked texture just can't take that into account, because it has to be baked from all angles.

Oh well...