Your code
double xMin = chart.ChartAreas["draw"].AxisX.ScaleView.ViewMinimum;
double xMax = chart.ChartAreas["draw"].AxisX.ScaleView.ViewMaximum;
double yMin = chart.ChartAreas["draw"].AxisY.ScaleView.ViewMinimum;
double yMax = chart.ChartAreas["draw"].AxisY.ScaleView.ViewMaximum;
double posXStart = chart.ChartAreas["draw"].AxisX.PixelPositionToValue(e.Location.X) - (xMax - xMin) / 2;
double posXFinish = chart.ChartAreas["draw"].AxisX.PixelPositionToValue(e.Location.X) + (xMax - xMin) / 2;
double posYStart = chart.ChartAreas["draw"].AxisY.PixelPositionToValue(e.Location.Y) - (yMax - yMin) / 2;
double posYFinish = chart.ChartAreas["draw"].AxisY.PixelPositionToValue(e.Location.Y) + (yMax - yMin) / 2;
places the point where the mouse was over (e.Location) into the middle of the chart. It must be adjusted such that the position does not change.
I did not check if following code really fulfills that requirement, it may need some minor changes:
double posXStart = (chart.ChartAreas["draw"].AxisX.PixelPositionToValue(e.Location.X) + xMin) / 2;
double posXFinish = (chart.ChartAreas["draw"].AxisX.PixelPositionToValue(e.Location.X) + xMax) / 2;
double posYStart = (chart.ChartAreas["draw"].AxisY.PixelPositionToValue(e.Location.Y) + yMin) / 2;
double posYFinish = (chart.ChartAreas["draw"].AxisY.PixelPositionToValue(e.Location.Y) + yMax) / 2;