Ryssen vann med 2–1 i set, 6–2, 4–6, 6–2.
Rubljov bröt världstreans serve tre gånger i första set och kunde vinna komfortabelt med 6–2.
Nadal var i brygga även i andra set – men kom tillbaka från 1–3-underläge och lyckades ta matchen till 1–1.
Men det skulle bli Rubljovs dag trots allt. I det tredje och sista setet återtog världsåttan kommandot och städade av den 20-faldige grand slam-vinnaren med 6–2.
För den 23-årige ryssen väntar nu 27:e-rankade norrmannen Casper Ruud i semifinal. Ruud har imponerat stort i turneringen och har vunnit tre raka matcher mot högre rankat motstånd, tidigare under fredagen besegrade han italienske Fabio Fognini, rankad 18, i två raka set.
Nadal trivs vanligtvis i Monte Carlo och har vunnit turneringen elva gånger i karriären, senast 2018.
I den andra semifinalen möts Daniel Evans och Stefanos Tsitsipas.