City boss Pep Guardiola is still awaiting the return of many of his first-team players after extended runs at the World Cup, but his young team - as well as summer signing Riyad Mahrez - competed well at Soldier Field.
The Premier League champions started the better of the two sides with England Under-21 international Jack Harrison making an impression in the final third, but at the other end, City were indebted to Michael Bolton making a timely block to prevent a Dortmund opener.
However, just before the half-hour mark, Dortmund went ahead from the penalty spot. Oleksandr Zinchenko was adjudged to have fouled Christian Pulisic inside of the area and Gotze did the rest as the German fired the ball down the middle of the goal.
City remained a threat with Harrison miscuing an effort from a promising position, and either side of the break Mahrez saw a free kick tipped over the crossbar and another set piece drift just wide of the post.
At the break, out-of-favour Joe Hart was introduced by Guardiola and as the second half progressed, the England international was forced into action to pull off a brilliant save to his left from Mahmoud Dahoud.
City still showed ambition at the other end with Lukas Nmecha seeing an effort comfortably saved by Marvin Hitz, and that missed chance resulted in Guardiola making a number of changes including the introduction of Leroy Sane.
The German winger - who was left out of his nation's World Cup squad - could not inspire his team to an equaliser, however, and it left City to begin their preparations for the upcoming campaign with a defeat.
MANCHESTER CITY: Bravo (Hart 46'), Denayer (Humphreys 66'), Zinchenko, Luiz (Sane 73'), Harrison, Nmecha (Touaizi 73'), Foden (Garre 73'), Garcia, Diaz (Dele-Bashiru 66'), Mahrez (Roberts 73'), Bolton
BORUSSIA DORTMUND FIRST-HALF XI: Hitz, Bockhorn, Isak, Toprak, Schmelzer, Gotze, Burnic, Rode, Pulisic, Larsen, Zagadou
BORUSSIA DORTMUND SECOND-HALF XI: Hitz, Toljan, Wolf, Diallo, Philipp, Dahoud, Sahin, Gomez, Pieper, Sancho, Dieckmann