Deeney struck for the fifth time in seven games as Walsall picked up their first win in four matches. Michael Ricketts had put Walsall in control with his 12th goal of the season after 17 minutes before Deeney doubled their advantage 60 seconds before half-time.
Colchester, who slipped to their first defeat on the road in seven games, could have been well in control before Walsall took charge. But they ultimately paid the price for not taking advantage of their dominant start.
Colchester striker Jamie Guy was denied in a one-on-one after just 65 seconds by goalkeeper Clayton Ince. Mark Yeates sent a free-kick just over the bar and Guy was again frustrated by a brave save at his feet by Ince before the Trinidad and Tobago international denied Yeates.
Having managed to successfully come through that storm, Walsall took the lead against the run of play when Alex Nicholls led a swift counterattack before picking out Sofiene Zaaboub with a cross-field ball.
Zaaboub rolled a left-wing cross into the path of Ricketts who bundled the ball past former Walsall goalkeeper James Walker from six yards.
Walker then frustrated Deeney and Zaaboub before Ricketts turned provider on the stroke of half-time to set up Walsall's second. Walsall again exposed Colchester down their left flank with Zaaboub crossing for Ricketts whose header back across the face of goal was converted from close-range by Deeney.
Colchester did make a determined bid at the start of the second-half to mount a fight back but it was in vain. Ince denied Clive Platt in the 51st minute before Paul Reid saw his 'goal' ruled out for offside and substitute Scott Vernon twice shot just wide.
Yeates weaved his way into the area 14 minutes from time but he could not cap an impressive display with a goal as Ince tipped his angled drive around the post.
Colchester's dismal day was summed up in the final minute when substitute Simon Hackney failed to hit the target from six yards when he only had Ince to beat.