Buggy code:
public abstract class AbstractIntegrator implements FirstOrderIntegrator { protected Collection < StepHandler > stepHandlers ; protected double stepStart ; protected double stepSize ; protected boolean isLastStep ; protected boolean resetOccurred ; private Collection < EventState > eventsStates ; private boolean statesInitialized ; private final String name ; private Incrementor evaluations ; private transient ExpandableStatefulODE expandable ; public AbstractIntegrator ( final String name ) { } protected AbstractIntegrator ( ) { } public String getName ( ) { } public void addStepHandler ( final StepHandler handler ) { } public Collection < StepHandler > getStepHandlers ( ) { } public void clearStepHandlers ( ) { } public void addEventHandler ( final EventHandler handler , final double maxCheckInterval , final double convergence , final int maxIterationCount ) { } public void addEventHandler ( final EventHandler handler , final double maxCheckInterval , final double convergence , final int maxIterationCount , final UnivariateRealSolver solver ) { } public Collection < EventHandler > getEventHandlers ( ) { } public void clearEventHandlers ( ) { } public double getCurrentStepStart ( ) { } public double getCurrentSignedStepsize ( ) { } public void setMaxEvaluations ( int maxEvaluations ) { } public int getMaxEvaluations ( ) { } public int getEvaluations ( ) { } protected void resetEvaluations ( ) { } protected void setEquations ( final ExpandableStatefulODE equations ) { } public double integrate ( final FirstOrderDifferentialEquations equations , final double t0 , final double [ ] y0 , final double t , final double [ ] y ) throws MathIllegalArgumentException , MathIllegalStateException { } public abstract void integrate ( ExpandableStatefulODE equations , double t ) throws MathIllegalArgumentException , MathIllegalStateException { } public void computeDerivatives ( final double t , final double [ ] y , final double [ ] yDot ) throws MaxCountExceededException { } protected void setStateInitialized ( final boolean stateInitialized ) { } protected double acceptStep ( final AbstractStepInterpolator interpolator , final double [ ] y , final double [ ] yDot , final double tEnd ) throws MathIllegalStateException { double previousT = interpolator . getGlobalPreviousTime ( ) ; final double currentT = interpolator . getGlobalCurrentTime ( ) ; if ( ! ( statesInitialized ) ) { for ( EventState state : eventsStates ) { state . reinitializeBegin ( interpolator ) ; } statesInitialized = true ; } final int orderingSign = ( interpolator . isForward ( ) ) ? + 1 : - 1 ; SortedSet < EventState > occuringEvents = new TreeSet < EventState > ( new Comparator < EventState > ( ) { public int compare ( EventState es0 , EventState es1 ) { return orderingSign * ( Double . compare ( es0 . getEventTime ( ) , es1 . getEventTime ( ) ) ) ; } } ) ; for ( final EventState state : eventsStates ) { if ( state . evaluateStep ( interpolator ) ) { occuringEvents . add ( state ) ; } } while ( ! ( occuringEvents . isEmpty ( ) ) ) { final Iterator < EventState > iterator = occuringEvents . iterator ( ) ; final EventState currentEvent = iterator . next ( ) ; iterator . remove ( ) ; final double eventT = currentEvent . getEventTime ( ) ; interpolator . setSoftPreviousTime ( previousT ) ; interpolator . setSoftCurrentTime ( eventT ) ; interpolator . setInterpolatedTime ( eventT ) ; <START_BUG> final double [ ] eventY = interpolator . getInterpolatedState ( ) ; <END_BUG> currentEvent . stepAccepted ( eventT , eventY ) ; isLastStep = currentEvent . stop ( ) ; for ( final StepHandler handler : stepHandlers ) { handler . handleStep ( interpolator , isLastStep ) ; } if ( isLastStep ) { System . arraycopy ( eventY , 0 , y , 0 , y . length ) ; for ( final EventState remaining : occuringEvents ) { remaining . stepAccepted ( eventT , eventY ) ; } return eventT ; } if ( currentEvent . reset ( eventT , eventY ) ) { System . arraycopy ( eventY , 0 , y , 0 , y . length ) ; computeDerivatives ( eventT , y , yDot ) ; resetOccurred = true ; for ( final EventState remaining : occuringEvents ) { remaining . stepAccepted ( eventT , eventY ) ; } return eventT ; } previousT = eventT ; interpolator . setSoftPreviousTime ( eventT ) ; interpolator . setSoftCurrentTime ( currentT ) ; if ( currentEvent . evaluateStep ( interpolator ) ) { occuringEvents . add ( currentEvent ) ; } } interpolator . setInterpolatedTime ( currentT ) ; final double [ ] currentY = interpolator . getInterpolatedState ( ) ; for ( final EventState state : eventsStates ) { state . stepAccepted ( currentT , currentY ) ; isLastStep = ( isLastStep ) || ( state . stop ( ) ) ; } isLastStep = ( isLastStep ) || ( Precision . equals ( currentT , tEnd , 1 ) ) ; for ( StepHandler handler : stepHandlers ) { handler . handleStep ( interpolator , isLastStep ) ; } return currentT ; } protected void sanityChecks ( final ExpandableStatefulODE equations , final double t ) throws NumberIsTooSmallException { } }

Fix:
final double [ ] eventY = interpolator . getInterpolatedState ( ) . clone ( ) ;