Halladay gave up five hits with one walk and six strikeouts in seven scoreless innings, ending his streak of wins in five straight starts.
Gonzalez escaped a jam in the ninth for his seventh save.
The Braves took advantage of Halladay's exit to score the game's only run and hand the Blue Jays their fourth straight loss.
Matt Diaz, pinch-hitting for Kawakami, led off the eighth with a double to center off Jesse Carlson (1-3) and moved to third on Yunel Escobar's groundout to first. Diaz scored on Kotchman's fly to left field.
Aaron Hill hit a one-out double to left field off Gonzalez and advanced to third on Alex Rios's weak grounder to Gonzalez. Vernon Wells followed with a grounder that a charging Martin Prado bobbled briefly before recovering to throw to first. The throw beat Wells by one-half step.
The Blue Jays, shut out for the first time this season, remain one-half game ahead of Boston in the AL East.
Kawakami gave up only two hits through seven scoreless innings before Scott Rolen led off the eighth with a double to left. Rolen was left standing at second as Lyle Overbay grounded out to Kawakami, Rod Barajas hit a fly to shallow right field, and pinch-hitter Joe Inglett struck out.
Kawakami, who had lost five of his last six decisions and entered the game with a 5.73 ERA, looked to be an unlikely bet to keep pace with Halladay, the 2003 Cy Young winner who was looking to win his sixth straight start.
Kawakami, a 33-year-old rookie, did not last more than six innings in any of his first seven starts, but he looked strong against the Blue Jays after limiting his pitch count early in the game.
Kawakami struck out the side in the sixth inning and again retired the Blue Jays in order in the seventh.
Halladay kept pace by pitching out of trouble in the first and fourth innings.
The Braves had runners on first and third in the first following singles by Kotchman and Brian McCann, but Kelly Johnson took a called third strike to end the threat.