Laurance capitalised on a near-crash from race leader Jonathan Milan (Bahrain-Victorious) in the final 500 metres to win ahead of the latter who finished second and Matej Mohoric (Bahrain-Victorious) who came in third.
With the bunch charging into the line, Milan slipped on the road in an attempt to avoid crashing into Sacha Modolo (Bardiani CSF Faizanè) giving Laurance a window to edge ahead.
Milan's second place still awarded him bonus seconds in the general classification, enabling him to extend his lead on Jonas Vingegaard (Jumbo-Visma) to 10 seconds with two stages left.
“It was really tricky, and really, really slippery in the rain," Laurance said following the stage.
"I tried to stay all the time in a good position on the final lap. In the corner, one guy just [fell]. I was in a good placement and I could come back to Mohoric.
"When I saw Mohoric just in front of me, I said, ‘OK, I’m faster and it’s my time’, so I give all for the finish line. I get my first win, so it’s incredible."
After winning yesterday's Stage 3, Tour de France winner Vingegaard finished 25th with no time losses and is still well in with a chance of catching Milan's lead in the final two stages.
The CRO Race continues tonight with Stage 5, a hilly 154km course from Opatija to Labin that will see more action in a tight general classification. Watch the action from 9:30pm (AEST) on SBS On Demand