Gordon McRorie's penalty and a DTH van der Merwe try put Canada 8-0 in front at half-time.
The lead became 15-0 as Jeff Hassler bounced his way out of some tame tackling to touch down.
But number eight Mihai Macovei went over for two late tries and Florin Vlaicu's penalty won it for Romania.
It is the first time Canada have lost all four of their group matches at a World Cup, while Romania can still finish third in Pool D - securing automatic qualification for the 2019 World Cup - if they beat Italy on Sunday.
Source:
BBC news