Cleveland (66-71) rallied in the late innings to earn victories in each of the first two games of the series, but it failed to stage a comeback on Sunday.
Colin Poche (10-3) collected the win, while Trevor Stephan (6-5) was tagged with the loss. Pete Fairbanks picked up his 19th save, recording two outs after inheriting two runners on base in the ninth.
The Rays added three insurance runs in the ninth on RBI singles by Brandon Lowe and Isaac Paredes and Randy Arozarena's fielder's-choice grounder that plated Lowe.
With the score knotted at 2 in the eighth, Jose Siri drew a walk and stole second, setting up Walls' go-ahead hit.
Both starters were effective, but neither was involved in the decision.
Cleveland's Xzavion Curry gave up two runs (one earned) with six strikeouts in 5 2/3 innings. Tampa Bay rookie right-hander Taj Bradley allowed two runs (one earned) with seven strikeouts and five walks in five innings.
Curry breezed through the first two innings, striking out four. But in the third, Walls reached on a throwing error by second baseman Tyler Freeman. After Walls stole second, Rene Pinto connected on a fastball for a two-run home run.
Josh Naylor, reinstated from the injured list earlier Sunday after being out with a right oblique strain, pulled the Guardians even with an RBI single in the fifth inning. Naylor was in the lineup for the first time since July 31. Steven Kwan, who had walked, scored the tying run.
—Field Level Media