Sending a noteOn with 0 velocity instead of noteOff is surprisingly common among MIDI keyboard implementations, so Im surprised that a lot of software wasn't handling it well.
It's not just common, it is part of the MIDI specification and deliberately done that way to allow running status, an optimization that was important in the days of (true) serial MIDI.