Evans first passed teammate Carroll, and then broke into the top 10 after former race leader José María López and series leader Sebastian Buemi both spun at turn one. This put Evans up to seventh.
Di Grassi's race to the final flag was straight forward; with good pace and energy conservation he effectively cruised to victory. Things were chaotic in the battle for second, however, as D'Ambrosio held up the field with his power-saving tactics.
Soon D'Ambrosio had a five-car queue behind him, headed by former Formula 1 pilot Jean-Eric Vergne and tailed by Evans. Vergne piled on the pressure, though he was receiving it too from the Mahindra pair behind him of Nick Heidfeld and Felix Rosenqvist.
In the final four laps of the 45-lap race, Vergne's pressure reached huge heights - particularly on the run to the turn three chicane where he would constantly throw his car to the outside of D'Ambrosio. His frequent shuffling on track often forced the Mahindra pairing behind him to react, and this allowed Evans to take sixth from one of them, Rosenqvist, with three laps to go.
It all turned on its head on the penultimate lap, as the battle to get around D'Ambrosio reached fever pitch and tightened the train even more. Heidfeld passed Nicolas Prost for fifth, only for Prost to spin him as they navigated the arena section.
Evans took a heavy hit from Rosenqvist behind him in the melee, but emerged out the other side unscathed in fifth. Rosenqvist then cleaned up his spun teammate, spewing debris all over the circuit.
Evans then miraculously gained fourth, as D'Ambrosio's energy finally ran out on the last lap. He finished some seven seconds behind the second-placed Vergne, and three seconds behind Sam Bird in third.
The result boosts Evans to 11th in the standings, after being points-less following the first three events. Evans' teammate Carroll also claimed points, finishing in eighth.
The series travels to Monaco next month for round five of the season, a circuit where Evans has historically excelled.
1. Lucas di Grassi 45 laps
2. Jean-Eric Vergne +1.968
3. Sam Bird +5.480
4. Mitch Evans +9.770
5. Nicolas Prost +9.956
6. José Maria López +10.631
7. Daniel Abt +11.696
8. Adam Carroll +13.722
9. Nelson Piquet Jr. +14.156
10. Esteban Gutierrez +15.717