If you have spikes that would disturb a micro, they will probably disturb any digital logic circuit. You'll need to clean those up into any circuit. Your best bet is probably a linear regulator from a 5V source and step the voltage down to 3.3V. This 1.7V headroom will allow the linear regulator to absorb any of the transient spikes and keep a clean 3.3V output.
That being said, whenever I use logic I like to make it programmable. That way, in case I make a mistake, it's just a fix in the program. You can get eval boards for different programmable logic chips that probably have a linear regulator as part of the board. You didn't mention if this was a one-off or if you're meaning it for any sort of mass production - that will drive the solution.
If it is a one-off, Lattice makes a $35 eval board that is in stock at Digi-key. You would have to learn their GUI & how to program the chip, but in the end it might be easier than wiring up a bunch of counters, clocks, latches, and comparators. Here's a link to that:
https://www.digikey.com/product-detail/en/lattice-semiconductor-corporation/LCMXO2-7000HE-B-EVN/220-2625-ND/3906092
If you'd rather go the hard-logic route, it gets more difficult. You'll need a low-frequency clock (100kHz?) that you would tie into a clock input on a counter. Then your PWM signal gets tied into the count-enable pin. Basically when your PWM signal goes high, you start counting, then when it goes low, you stop. This latched-in value is fed into a comparator, and if it falls in the right range, you output that signal to an LED or some other down-stream logic. Of course, it is more complicated than this, because you also have to reset the counter after your count value gets latched in. Lots of little details to work out, which is why I prefer programmable logic.
Hope this helps - perhaps if you let us know what you're more comfortable with (discrete logic vs. programmable) we can set you on a good path.