Johnson and Zobrist's consecutive solo shots came in the eighth inning and gave the Rays a 9-6 advantage after Tampa Bay had led 7-1 earlier in the game.
Johnson finished 3-for-4 with two RBI and three runs scored while Zobrist also had three hits, drove in three and scored twice for the Rays, who held on to avoid a three-game sweep at Camden Yards.
Carlos Pena added a two-run double as the second-place Rays cut the Orioles' lead in the American League East to one game.
James Shields (6-1) earned the win despite surrendering six runs (four earned) on seven hits before exiting after 6 1/3 innings.
O's starter Jake Arrieta (2-4) was smacked around for seven runs on 10 hits in a 3 2/3-inning stint.
Matt Wieters socked a two-run homer and Nick Markakis went 2-for-4 with three RBI for Baltimore.