The home side, who had not won in the league since December, were on a run of five successive draws and needed an impressive all-round performance from the 19-year-old to carry them through.
Inter were pegged back in sloppy style after taking the lead early on, but Bologna, who were sloppy themselves in the second period, ended the game with nine men.
Karamoh, on loan from Caen, threatened from the off, and had a hand in the opening goal when his flicked pass to the byline was cut back into the box by Marcelo Brozovic, before Eder brushed the ball past Antonio Mirante.
Brozovic could then have had a goal of his own from a cross by Joao Cancelo, but the Croatian's header drifted wide.
It took 23 minutes for Bologna to respond, and their first chance tested Inter stopper Samir Handanovic, who did well to stretch across goal and tip wide a Rodrigo Palacio header.
Rodrigo was the man to equalise for the visitors two minutes later. Inter defender Miranda's sliced clearance fell into the path of the striker, who controlled the ball before smashing past Handanovic.
Ivan Perisic had two further opportunities to restore Inter's lead, while Eder, who went down twice in the penalty area, had his appeals for a spot kick turned down.
Inter continued to push for a second goal, with chances coming their way in the opening stages of the second half. Danilo D'Ambrosio headed onto the bar from a corner, which was eventually cleared, before Perisic's headed effort moments later spiralled over.
The hosts did eventually restore their lead with a fantastic strike from Karamoh. The 19-year-old stepped past his opponent before unleashing a left-footed strike that Mirante would have done well to keep out.
Bologna might have had a late chance to equalise from the penalty spot after Cesar Falletti struck the ball against D'Ambrosio, but referee Paolo Valeri stood with his original decision following a VAR referral.
Nine minutes of stoppage time ensued, but Inter held on and are now third in the Serie A table.
INTER MILAN (4-2-3-1): Handanovic; Cancelo, Skriniar, Miranda (Lopez, 45), D'Ambrosio; Vecino, Valero, Perisic; Brozovic (Rafinha, 58); Karamoh (Gagliardini, 73), Eder
BOLOGNA (4-3-3): Mirante; Mbaye, Gonzalez, De Maio, Masina; Poli (Torisidis, 72), Pulgar, Dzemaili; Orsolini (Falletti, 66), Palacio, Di Francesco (Avenatti, 80)