Erhun Oztumer’s fourth goal in five matches proved to no avail as the Saddlers’ three-match winning run was ended by struggling Northampton.
The Saddlers were gifted the lead after 70 seconds when Amadou Bakayoko profited on a mix-up between keeper David Cornell and Aaron Pierre to square for Oztumer to side-foot home.
However, Town equalised just two minutes later as John Joe O’Toole’s header from Sam Foley’s cross was clawed out by Mark Gillespie and nodded in by Chris Long from close range.
Walsall could have gone back in front when Kieron Morris tricked his way into the box and prodded an effort past Cornell but David Buchanan got back to clear off the line.
The visitors were dealt a blow midway through the half when Flo Cuvelier was forced off through injury after being fouled by Matt Crooks.
The Saddlers continued to look the more dangerous, with Bakayoko firing wide from an Oztumer free-kick and Ismail curling over from 20 yards.
Luke Leahy then traded passes with Bakayoko before driving a rising shot over with his weaker right foot.
But it was Northampton who went ahead against the run of play on 41 minutes, Long turning smartly on the edge of the box before drilling a crisp right-footed strike beyond Gillespie.
Walsall struggled to get going at the start of the second half, with the game almost devoid of incident until the final 20 minutes.
The Cobblers registered the first attempt of the second 45, Matt Grimes with an ambitious 30-yard free-kick which a flying Gillespie palmed away from the top right-hand corner.
That chance momentarily sparked the Saddlers into life, with Luke Leahy drilling a well-struck volley wide from 25 yards.
Walsall could have levelled in added time when Cornell failed to gather a loose ball, allowing Jon Guthrie to nip in and cross into the middle but no-one was there to profit.
Emotions boiled over at the end as Bakayoko was sent off for a reckless lunge on Foley, with Crooks - incensed at the challenge - also shown red for dissent.
Team: Gillespie, Kinsella (Devlin 82'), Wilson, Guthrie, Leahy, Chambers, Cuvelier (Edwards 22'), Ismail, Oztumer, Morris (Agyei 65'), Bakayoko.
Subs not used: Ganley, K Roberts, Flanagan, Jackson.
Attendance: 5,055 (394 Walsall supporters).