Wow, there've been a lot of responses on this so I'll try to address them all - thanks guys!
What frequency is the square wave?
The easiest method is to use a series resistor, say 10k to 1M, before the MCU input. The internal ESD protection diodes will clamp the input voltage at about 0.6V above the MCU's power supply.
Frequency will be around the 0-1kHz range, duty cycle of at least one signal is fixed at 20%, the others I don't know the duty cycle of (the requirements I've been given are not super detailed).
From what I've read, the ESD diodes aren't designed for this kind of service and could be damaged/do degrade when used in this manner. I had considered a zener diode in parallel with the input or 2 Schottky diodes as others have suggested, however I'm concerned about loading the transducer (at least one post I've come across was complaining of loading issues even with 10s of kOhms of input resistance).
Just use a discrete small-signal MOSFET with a drain resistor to +3.3 V. There are automotive types available with gate protection against transients.
Don't forget it will invert the input, but your firmware should take care of that.
I'm currently looking at the FDN5632N-F085
https://www.digikey.com.au/product-detail/en/on-semiconductor/FDN5632N-F085/FDN5632N-F085CT-ND/4562779, apparently it's an N-channel 'Automotive, AEC-Q101, PowerTrench®' MOSFET.
V
GS = +/-20V
V
GS(th) = 1 (min), 2 (typ), 3 (max) Is this a good value? I think it is, due to being low enough for 5V triggering and high enough for some noise immunity
I believe, based on the on/off/delay and rise/fall times it should be good for ~15MHz (1/(30+15+1.7+5.2+1.3+12.9) = 1/66.1ns)
Inversion of the signal shouldn't be an issue as I can set the capture to occur on falling edge (not that it makes a difference, when I think about it)
Have I got everything here round the right way?
The other possibility is the 2N7002BKV,115
https://assets.nexperia.com/documents/data-sheet/2N7002BKV.pdf, which Hero999 has indicated would be sufficient (I have 4 pulse inputs, so 2 of these would see me right)
You should consider whether galvanic isolation might be beneficial.
If so, you could combine it with an optocoupler for level translation.
I think to do this I'll need a transistor/FET input anyway, to avoid loading the transducer?
It depends on how fast your signals are, what protection needed and how clean (signal integrity) you need the signal be.
For automotive application interfacing into sensitive equipment, complete galvanic isolation using optocoupler is favored. Considering that automotive 13.8v line can surge to very high voltage at load dump, even peaking at 60V(!)
Otherwise if the source is already surge-suppressed, you can use pretty much any logic level shifter. With comparator, the idea is to pull-up the comparator's open drain/open colector output into target voltage. Obviously the comparator itself is supplied from the (higher) source voltage. Unless specifically noted in the datasheet, never put voltages higher than supply voltage on any IC and expect it to work flawlessly.
About low voltage MOSFET. Almost all MOSFET Vgs(th) is pretty low in the ~2V area, and even lower for signal MOSFET. You don't need to get past Miller voltage just to conduct a few microamperes.
I believe there is already surge suppression on the signals, but I don't want to rely on that too heavily - does the above MOSFET satisfy the requirements or do I need further protection?
If you don't mind signal inversion, with 5V you could just stick a 5V tolerant hex inverter in there.
I don't see signal inversion as a problem, but I think the issue will be when there's a 0-12V signal. I can't guarantee the person I'm designing this for will have all 5V or all 12V transducers; they have told me there's a mix and in the future the mix could change, so I'm trying to cover both cases.