Search algorithm to find a point from a given X value
The NPts == 1 case shouldn't need to be handled separately.  The min-max clamping should take care of it, if you write it smartly (using &lt;= and &gt;= tests).

The min-max clamping should should do a short-circuit return.

Once clamped, there shouldn't be any need to test if (nearestIndex &lt; curve.NPts).

I would prefer to calculate the delta based on the min and max, for better precision.  Extrapolating based on Points[1].X - Points[0].X could let floating-point inaccuracies accumulate.

A sanity check before returning the value might be a good idea — it's up to you depending on how much you trust the data.

private ZedGraph.PointPair findPoint(ZedGraph.CurveItem curve, double x) 
{
    // Look for the min and max value
    double min = curve.Points[0].X;
    double max = curve.Points[curve.NPts - 1].X;

    // Prevent error if mouse is out of bounds.
    if (x &lt;= min) return curve.Points[0];
    if (x &gt;= max) return curve.Points[curve.NPts - 1];

    double delta = (max - min) / (curve.NPts - 1);
    int index = (int)Math.round((x - min) / delta, 0);

    Debug.Assert(Math.Abs(x - curve.Points[index].X) &lt;= delta / 2, "Interpolation error");
    return curve.Points[index];
}