Being tinkering with it for hours, I tried various attempt, I tried multiple power supply filters to decouple any possible noise from alternator, didn't work, I tried to bypass the MCLR-pin, put it to high without pullup resistor, still failed, I tried separating voltage source, still happening.
Almost brought me to frustration, I tried to shorts out the output from ignition coil, and the restarting problem disappears!
Here's the oscilloscope shots:
This is the digital data before the engine running.
Now, the data is contaminated with noises from the engine when running.
Closer look at the noise. (2V/div).
The noise now attenuated with aluminum foil coated cables, to form a Faraday Cage.
At 200mV/div, the noise is further attenuated with an extra resistor in series at the HV output.
So far, that seems to work well, but the problem is still there when the engine is revved over 3000RPM. Final resolution might be to isolate the whole circuit by embedding it inside a fully metal case.
I also learned the hard way, why there's a resistor embedded inside certain spark plugs and spark plug boots.