Bremen went ahead in the 22nd minute through Felix Kroos before Boateng struck in the 64th and 85th minutes with Jefferson Farfan sealing victory a minute into injury time.
Schalke bounced back from their 3-0 loss at Chelsea in the Champions League for their fourth victory in the last five Bundesliga matches to improve to 20 points.
Werder Bremen, who have now lost five straight games to Schalke, suffered just their second defeat in the last seven games to remain on 15 points.
The visitors had the first chance of the match after 14 minutes but Aaron Hunt's shot went over the bar.
Schalke were close to going ahead three minutes later but Werder keeper Sebastian Mielitz made a superb stop from Julian Draxler's shot from close range.
It was Bremen who took the lead after 22 minutes as Kroos snatched the ball from Roman Neustadter and then beat Schalke keeper Timo Hildebrand at the far right post for his first Bundesliga goal.
Schalke nearly equalised six minutes before the break but Neustadter could not beat Mielitz from 25 yards out.
The hosts were in danger of falling behind 2-0 at the hour mark as Hildebrand's clearance attempt went right to Eljero Elia, who rushed forward but slipped and could not get a good shot on goal.
Boateng made Bremen pay for their ineffectiveness by equalising after 64 minutes following a header from a cross by Draxler.
Boateng struck again in the 85th minute to make it 2-1, again with a header, this time after a cross from Christian Fuchs.
Schalke finished off the visitors with a third goal a minute into injury time with Boateng feeding a through ball to Draxler for a pass to Farfan, who hit the ball into the empty goal.