Erik Hurtado and Jordan Harvey also scored for the Whitecaps, who beat the Timbers for the first time since the two teams joined Major League Soccer in 2011.
The victory extended Vancouver's unbeaten streak to five straight matches. The Whitecaps (5-2-5) played to a 2-all draw against the Seattle Sounders in another Cascadia Cup rivalry match last weekend.
The loss snapped a six-match unbeaten streak for the Timbers (3-4-7), who were coming off a successful road trip with back-to-back wins against New York and Chivas USA. It was their first lost at home this season.
The Cascadia Cup is a supporter-created award that goes to the winner of the combined season series between Portland, Seattle and Vancouver. The award dates to 2004, when all three played in the USL, but the rivalry between the three Pacific Northwest clubs goes back to 1975, when the teams were with the NASL.
The match got chippy toward the end, and Timbers coach Caleb Porter and Whitecaps coach Carl Robinson exchanged words afterward. Neither would reveal what was said, except for the usual congratulatory words, but players from both sides had to come between the two.
''We're all emotional,'' Timbers defender Jack Jewsbury said. ''It's a results-oriented business. Three goals, you expect to win. It's disappointing.''
Portland wasted no time and took an early 1-0 lead when Maximiliano Urruti scored in the third minute for his sixth goal of the season.
But Morales converted on his first penalty kick for the Whitecaps in the 16th minute to even the match at 1-all. Morales beat Timbers goalkeeper Donvan Ricketts on his second PK in the 26th minute to put Vancouver on top.
''Two goals and two assists,'' Robinson said. ''(Morales) needs to be a difference maker and he is a difference maker.''
The Timbers were stunned by twice getting hit with a PK, and some questioned the second one.
''After one, you figure the second one has to be 100 percent sure,'' Jewsbury said, adding that he hadn't been able to review the video.
Said Portland defender Jorge Villafana: ''There's always calls. We can't do anything about them. That's the ref's position. We have to just play.''
The Whitecaps scored again in the first-half-stoppage time when Hurtado, who grew up in nearby Beaverton, rebounded his own shot off Ricketts to give Vancouver a 3-1 lead.
Hurtado, who played for the Timbers' U-23s from 2011-12, has three goals in three straight matches.
Vancouver made it 4-1 with Jordan Harvey's goal from the top of the box just 9 minutes into the second half. But Portland closed the gap in the 77th minute with Gaston Fernandez's well-placed header off a cross from Diego Valeri. It was Fernandez's sixth goal of the year.
Portland captain Will Johnson narrowed it further with a goal in the 85th minute and as Robinson said, ''suddenly I'm sweating.'' But the rally came up short.
Going into the match, the Timbers were 4-0-4 against the Whitecaps since the teams joined Major League Soccer in 2011.
The Sounders and Timbers played to a 4-4 draw in early April to kick off the regional competition. Vancouver and Seattle played to another draw last weekend at BC Place.
Before their win Sunday, the Whitecaps were the only Western Conference team that hadn't beaten the Timbers.