The Jazz (28-26) rallied from a 14-point second-quarter deficit to collect the win, overcoming Wesley Matthews' season- and game-high 33 points on 10-of-12 shooting.
The ex-Utah guard drilled 5 of 6 3-pointers and gave Portland (25-29) a 97-94 lead with 2 minutes and 35 seconds remaining, after sinking a 25-foot 3 from the right wing.
But the Jazz outscored the Blazers 8-0 down the stretch, with everyone from Al Jefferson and Gordon Hayward to Jamaal Tinsley and Millsap rising up.
"We needed this win bad, and it showed how we played out there," Millsap said. "We got down big early. But the will not to want to lose the will to make it to that next level to get into the playoffs it came out."
Utah also stayed in contention. Before the Jazz's comeback began, eighth-place Houston had already downed Chicago. A loss would have put Utah two games behind the Rockets with just 12 games left in the season. But Millsap's explosion kept the Jazz above .500, only a game away from Houston and just 2.5 behind fifth-place Memphis.
"We talked about it so much and it sound like a broken record, but these guys have a lot of character and a lot of pride," Utah coach Tyrone Corbin said. "They're disappointed in that first quarter, which is exactly what we didn't want to happen them getting 35 points in it. But you know what? They buckled down and made some changes, and the guys responded very well and they laid it all out there."
Part of the change was moving Millsap to small forward. At the end of the 2010-11 season, the six-year veteran teamed with Derrick Favors and Jefferson on the court at the same time. During a game Monday that saw Utah lose starting point guard Devin Harris to a left ankle sprain, the Jazz suddenly turned to a lineup they hadn't experimented with in nearly a year.
Millsap responded by carrying Utah home. He scored 19 points on 9-of-12 shooting during the second half, while the Jazz outscored the Blazers 80-62 during the final three quarters.
"It was [Millsap], man. Because I did a terrible job on the offensive end [Monday], and Paul just stepped up," said Jefferson, who scored 13 points but was 6 of 17 from the field. "He took advantage at the 3, having a smaller guy on him. He took advantage of it at the 4 he quicker than most 4s. He just played smart basketball. … That's who he is. That's what he represent."
While Portland shot 54.5 percent (12 of 22) behind the 3-point line, the Blazers were hollow inside. Favors recorded 11 points and a co-game-high 11 boards, Hayward added 20 points with key baskets coming via dunks and tip-ins and the Jazz outscored Portland 56-34 in the paint.
After falling behind 35-22 and looking nothing like a team that's eyeing the best possible seed it can grab in the playoffs, Utah responded with the perfect answer: Jazz basketball.
"You can't think. You've got to just get out there and just play," Millsap said. "You've got to let your skillwork speak for itself. You can't worry about losing a game or, really, winning a game. It's just getting out there and playing to the best of your ability. And at the end of the day, it'll work out for you."
Tinsley entered the game with 2:30 left in the first half, replacing Harris. The Jazz starter said his ankle is sore, but the pain is tolerable. He plans to re-evaluate it Tuesday.
Storylines Utah ends skid
R In short • The Jazz fight back to down Portland 102-97 Monday.
Key stat • Utah outscores the Blazers 56-34 in the paint.
Key moment • Jamaal Tinsley steals a late inbound pass to set up a Paul Millsap dunk.