The hosts were reduced to 10 men in the 58th when Nayef Aguerd was sent off for fouling Lorient forward Armand Lauriente, who was bearing down on goal.
Flavien Tait increased the lead with a swerving long-range strike in the 79th before Gaetan Laborde capitalized on a counterattack to seal the victory in stoppage time.
Rennes is level on points with Monaco while Lorient remained three points above the relegation zone.
Also Sunday, fifth-place Nice needed a goal from substitute Khephren Thuram in the fourth minute of stoppage time to edge lowly Troyes 1-0 and stay two points behind Rennes.
Strasbourg lost ground in the race for European spots by losing 1-0 at Lille to slip to sixth place, one point behind Nice. Lille right back Zeki Celik netted with an off-balance volley in the 87th.
Nantes rallied from a 2-0 deficit to beat relegation-threatened Bordeaux 5-3. Nigeria forward Moses Simon gave Nantes a 4-3 lead in the 76th before Osman Bukari put the result beyond doubt with a downward header in the 89th.
Bottom side Metz saw its winless streak stretch to 13 games by losing 1-0 to midtable Brest. Algeria winger Youcef Belaili scored the only goal by converting a cross in the 27th. Metz finished the game with only nine men as goalkeeper Alexandre Oukidja and defender Jemerson were sent off in the second half.