Dodo rounded Dinamo goalkeeper Dominik Livakovic to slot home in the 75th minute after latching onto a pass from Alan Patrick, another member of Shakhtar's sizeable contingent of Brazilian players.
The result leaves both clubs level on four points after three games in Group C, meaning Manchester City will be five points clear at the top of the section if Pep Guardiola's side can inflict a third defeat in as many games on Atalanta.
The Croatian visitors had earlier come from behind to lead in Kharkiv, to where Shakhtar are exiled because of the conflict in eastern Ukraine.
Marlos set up Yevhen Konoplyanka to put Shakhtar ahead in the 16th minute, only for Spanish sensation Dani Olmo to turn in a Mislav Orsic cross and bring Dinamo level before the half-hour mark.
They then took the lead with an hour gone when Orsic scored from the spot after Shakhtar goalkeeper Andriy Pyatov recklessly hauled Mario Gavranovic to the floor.
But Dinamo, who lost every game when they last reached the group stage in 2016-17, could not hold onto the lead and were left frustrated as Olmo hit the outside of a post at the end of a late counter-attack.