I guess you are sure the device is definitely at rest (v=0) after each event, and not just moving slowly?
If so a couple of possible causes to consider:
NUMERICAL: You might get this type of thing if the integration is inaccurate.
Consider reducing sample interval, and use higher order integration. However, I would
have expected numerical drift to be sometimes positive, sometimes negative. If it is always negative, numerical seems less likely to me.
INSTRUMENTAL: Does that accelerometer need to be "level"? Is it possible to repeat
the experiment with the accelerometer mounted upside down to see
if the effect reverses?
An immediate suggestion to better understand the problem (which you have probably
already done) is compare the acceleration and velocity plots. As I recall once
the system is underway the two curves should be 90 degrees out of phase, so there
should be time alignment between peaks and zero crossing as in this sketch.
You could check the time alignment at those points. It might indicate if the drift
is arising at a particular part of the cycle (as you suggest).
A perfect correction would require identification of the exact cause. However, depending on what you are using the velocity curve for it might be acceptable to implement a "pragmatic" fix in processing. As one idea, in an ideal world the areas under the two positive peaks (in accel plot) should balance the area above the negative peak. The observed drift (dv in picture) should equate to this difference. Hence for example, you may be able to introduce a percentage boost
to the positive acceleration values. With a little thought this should be able
to be automated.
However first I'd suggest looking at the time alignment and see if that reveals anything useful.