Mal [Dove Cameron] struggles with her new celebrity life as the girlfriend of King Ben [Mitchell Hope], her hair turned blonde by a spell and the constant need to project a princess-like persona wherever she goes. She confides her insecurities to Evie [Sofia Carson], Carlos [Cameron Boyce], and Jay [Booboo Stewart], but they are content with their own new lives in Auradon.
Evie scolds Mal for leaning on her mother’s spell book to solve everything, urging that magic isn’t a cure-all. Carlos, hoping to ask Jane to the Cotillion, turns to Mal for help, and she provides him a truth serum in the form of a sweet. When his dog, Dude, eats it, he unexpectedly speaks blunt truths in English, adding a humorous dose of honesty to the mounting tension.
Ben eventually discovers Mal’s reliance on magic, and she finally admits her insecurities, which drives a rift between them. Mal returns to the Isle of the Lost, now ruled by Uma [China Anne McClain], Ursula’s daughter, along with Harry [Thomas Doherty] and Gil [Dylan Playfair], the sons of Captain Hook and Gaston. On the Isle, Mal visits hairstylist Dizzy Tremaine [Anna Cathcart], who restores her signature purple hair and adds some bangs, signaling a return to her true self. Harry learns of Mal’s return and informs Uma, setting in motion a plan to reclaim what she believes is hers.
Ben, Evie, Jay, and Carlos sneak onto the Isle to find Mal, but Gil recognizes them and foils the group’s attempt. Ben confronts Mal, who rejects his feelings for both her own sake and Auradon’s, leaving him dejected and vulnerable to Uma’s manipulation. Uma captures Ben and forces Mal and their friends to retrieve Fairy Godmother’s wand in exchange for his safe return.
Carlos and Jay head back to Auradon Prep, where they fashion a convincing replica of the wand using a 3D printer. They are confronted by Lonnie [Dianne Doan], Mulan’s daughter, who blackmails them into letting her come along, having previously been rejected by Jay’s sports team simply because of her gender.
Uma vents her bitterness that she and the other villains’ children were not chosen to go to Auradon, and Ben, hearing her out, considers inviting her—but Uma chooses a different path, aiming to reach Auradon on her own terms. Mal’s group returns, handing over the fake wand to secure Ben’s safety, but Uma detects the forgery.
The group flees back to Auradon as Ben and Mal’s relationship remains strained. The film’s ensemble of villain offspring confronts their pasts and begins to be more honest with one another: Carlos confesses to Jane but struggles to fully open up, while Jay endorses Lonnie as captain of his team.
Aboard a ship at the Cotillion, Ben arrives with Uma, declaring her his true love and announcing he will destroy the Isle’s barrier. Jane quickly reveals a stained-glass display Ben had commissioned to demonstrate his affection for Mal, revealing that his true love had always been Mal. Suspecting a love potion, Mal confesses her love for Ben and kisses him, breaking the spell. Enraged, Uma dives into the water, using Ursula’s magic seashell necklace to become a sea monster with tentacles, and Mal fights back as a dragon. Ben jumps into the water to intervene, calming the battle, and Uma returns the ring Ben had given her before leaving. Mal and Ben reunite, with Mal surrendering her spell book to Fairy Godmother. Evie then asks that Dizzy be allowed to attend Auradon Prep, and Dizzy accepts when offered the chance.
In a mid-credits scene, Uma addresses the audience, promising that the story is far from finished.