Haren (5-2) gave up a first-inning run, then allowed only two baserunners over the next six innings. He struck out three, walked one and hit a batter in lowering his ERA to 1.70.
"As the game went along I started to get stronger and I was able to put up a bunch of zeros," Haren said. "I was pitching a lot to contact today. ... They hit balls at guys, and I made a few mistakes I didn't pay for."
Haren has received run support of two runs or fewer in six of his 11 starts, one big reason why he's only got five wins. Bedard, similarly, has compiled a 2.12 ERA over this past five starts -- and is 0-1 in that span.
The left-hander allowed only two earned runs and six hits over seven innings, but on this night, Haren was just a little bit better.
"I've had to go up against Bedard twice now. I know it's going to be a dogfight, I know it's going to be a war," Haren said. "I know we're not going to win 12-2."
Haren was delighted to talk about his performance after the game. Bedard, on the other hand, walked out a side door before the media was allowed to enter the clubhouse.
Haren has allowed two earned runs over 14 innings in beating Baltimore twice this season. Both times, Bedard has been the victim.
On this occasion, the key blow against Bedard (3-3) was a two-run homer by Nick Swisher in the third inning. Oakland added an unearned run in the fourth, and that was just enough to enable the A's to improve to 14-2 in their last 16 games at Camden Yards.
"He kept us in that ballgame," Orioles manager Sam Perlozzo said.
Embree returned for the ninth and ran into trouble, but struck out Jay Gibbons with runners on the corners and two outs to earn his second save -- the 10th in 728 relief appearances.
Embree, who has inherited the closer's role while Huston Street is on the disabled list, said, "I think Huston just took some time off so I could get No. 10 and retire."
Bedard struck out eight to take over the AL lead with 83. But Baltimore lost for the ninth time in 12 games to fall a season-high six games under .500 (21-27).
After losing his first two starts this season, Haren has gone unbeaten in nine straight starts. The victory improved his career record to 39-37, the first time he's been two games over .500.
"The key to the game was Dan Haren," Oakland manager Bob Geren said. "He gave up the one run in the first inning, then he really settled in. He just was better as it went on."
Oakland had outscored the opposition 30-8 in the first inning before Roberts led off with a walk, stole second and scored on a single by Tejada.
Swisher put the A's in front in the third with a drive to left after Shannon Stewart walked. Three of his seven home runs have come against Baltimore.
Oakland added an unearned run in the fourth when Hiram Bocachica hit a sacrifice fly after Huff fumbled a grounder to third. Huff started at third base for only the second time this season because Perlozzo decided to rest Melvin Mora.
Mora said he should have been told Wednesday about the plan, and groused before the game about a lack of communication between the manager and the players.
Afterward, Mora said, "Everyone deserves an explanation. I hope nothing will happen anymore. I want communication. I need communication."
- Oakland C Jason Kendall allowed 31 straight stolen bases before throwing out Payton in the third.
- Mark Scutaro was 0-for-10 lifetime against Bedard before getting singles in his first two at-bats.
- Roberts is 1-for-21 with two outs and runners in scoring position.