Luciano Spalletti's men have lost two and drawn six league matches since their 5-0 demolition of Chievo on December 3, having gone unbeaten for the first 16 matches of the season.
Eder's second-minute strike got Inter off to an excellent start at San Siro, but Rodrigo Palacio's equaliser against his old club put the home side on course for a fifth consecutive 1-1 result.
However, Karamoh – making his first top-flight start – buried a wonderful strike from outside the area shortly after the hour mark for three points that lift Inter above Lazio into third, 14 points adrift of second-placed Juventus.
Bologna, who had both Ibrahima Mbaye and Adam Masina sent off in the second half, remain 10 points clear of the relegation zone.
Inter's determination to break their poor run was evident from kick-off, taking only 91 seconds go in front.
A swift attacking move ended with Marcelo Brozovic pulling the ball back from the byline for Eder to prod home from close range, netting Inter's fastest Serie A goal since 2007.
Palacio threatened to level matters when his header drew a superb diving save from Samir Handanovic after 23 minutes, but the Argentine was more successful two minutes later.
A wild clearance from Miranda sent the ball looping into the path of Palacio, who took the ball down on his chest and judged the bounce perfectly to rifle an effort beyond Handanovic.
Ivan Perisic sent a weak strike dribbling frustratingly into the arms of Antonio Mirante as Inter looked to re-establish their advantage, before Eder went down in the box under pressure from Sebastien De Maio, although referee Paolo Valeri was unmoved by appeals for a penalty.
Miranda was replaced by debutant Lisandro Lopez at half-time following his involvement in the Bologna equaliser and Inter came agonisingly close to going back in front three minutes after the restart.
Danilo D'Ambrosio headed against the ground from close range, the ball bouncing up and striking the crossbar before Milan Skriniar's follow-up header sailed over the target.
The home fans took out their frustration on Brozovic as the midfielder left the field to be replaced by Rafinha after 58 minutes, but Karamoh gave them something to celebrate five minutes later.
| 73' What an effort from the lad on his full league debut! Helped to set up one goal before netting his first @SerieA_TIM strike in some style. He goes off for @gaglio94 to a standing ovation. #InterBologna 2-1 pic.twitter.com/IYRg6Elw19— Inter (@Inter_en) February 11, 2018
After drifting along the Bologna back line to set up the perfect shooting angle, the France Under-21 international fired in a stunning left-footed strike from outside the box.
Inter's cause was aided by Mbaye's lack of discipline, as the defender – another Nerazzurri old boy – earned himself two yellow cards in the space of four minutes.
The home side survived a VAR assessment of a suspected D'Ambrosio handball on the edge of the box, as well as a late Palacio effort kept out by the boot of Handanovic, before Masina's red card for leaving his studs in on Lopez put the final nail in Bologna's chances in stoppage time.
Key Opta facts:
- Inter scored more than one goal in a Serie A game for the first time since December (against Chievo).
- Bologna have conceded at least two goals in eight out of last nine league games.
- Bologna have not won any of last eight Serie A games played against Inter.
- Bologna have lost six out of their last eight away league games.
- Eder has scored at least one goal in each of the last four games he has started in the top flight.