Cleveland overcame three errors in one inning by third baseman Andy Marte, a blown save by Kerry Wood and an eighth-inning disruption by two unruly fans.
Adrian Beltre's two-out, two-run homer in the ninth off Wood (1-2) put Boston ahead 7-6.
The Indians quickly loaded the bases with no outs in the bottom half against Daniel Bard (1-2). Bard, closing while Jonathan Papelbon is on the bereavement list, then struck out Travis Hafner and retired Jhonny Peralta on a foulout.
But Branyan delivered, looping a single over second baseman Dustin Pedroia in shallow right field.
The game was interrupted when two young men, one wearing a LeBron James jersey, sprinted across the outfield. One waved a bag of resin, creating a stream that resembled smoke. James' pregame ritual at Cleveland Cavaliers games is loading his hands with powder and tossing it in the air.
One of the fans slid to the ground as security personnel pursued him, the other tried to get over a wall but was shoved back by fans onto the field. Both men were handcuffed, hustled into the Indians bullpen and taken out of Progressive Field.
Earlier this season, a fan ran on the field in Philadelphia and was stopped with a Taser.
Wood got two fast outs in the ninth before hitting J.D. Drew in the right leg with a pitch. Beltre then hit his eighth homer to put Boston ahead. Beltre is 5-for-14 (.358) with three homers and seven RBIs in his career against Wood, who blew his second save in six tries.
The Indians loaded the bases on walks to Trevor Crowe and Austin Kearns around an opposite-field double by Shin-Soo Choo. Two outs later, Branyan won it.
One night after handing the Red Sox an 11-0 loss, their worst of the season, the Indians finally gained a second consecutive home victory for the first time since winning four in a row at Progressive Field on April 15-18.
Lou Marson's two-run single in the sixth put Cleveland ahead 6-5 against Boston starter Jon Lester.
Marte helped atone for his miscues with an RBI single that got the Indians within 5-4 in the sixth. Marson followed with a slicing opposite-field bloop to score two more.
Marte become the first major leaguer with three errors in an inning since Chicago White Sox third baseman Andy Gonzalez on Aug. 30, 2007. According to the Elias Sports Bureau, the last Indians player to err three times in an inning was shortstop Frank Duffy on Sept. 24, 1972 — in the 11th inning of the first game of a doubleheader against the New York Yankees.
Marte bobbled a ground ball by Kevin Youkilis with the bases loaded, scoring one run. Later, he made two errors on one play as two runs scored when he mishandled a grounder hit by Mike Cameron, scrambled after it and threw wildly to first.
Lester gave up six runs and nine hits over six innings. He struck out eight with one walk after going 7-0 with a 1.29 ERA in nine previous starts since a loss to Tampa Bay on April 18.
Boston DH David Ortiz was 0-for-4 and is 3-for-33 (.084) in June. … Youkilis left with a mild back spasm in the seventh. He went 0-for-3 after driving in 11 runs in nine games, going 15-for-35 (.429). … Red Sox manager Terry Francona said Papelbon will be activated Friday. … Red Sox RHP B threw a bullpen session. He was sent to the team hotel Wednesday with stomach flu. … Cleveland's Jason Donald played second base for the first time in the majors. A career shortstop, he started making the switch at Triple-A Columbus before being called up May 18 when SS Asdrubal Cabrera sustained a broken left arm. … Red Sox 2B Dustin Pedroia was 2-for-5, snapping an 0-for-15 slump.