Increase performance in sub-line detection
Yes it can be done faster. Your algorithm has a \$O(n^2)\$ time.

Idea: store the indexes of the points of the line in a dictionary and use the points as key (I assume that two distinct points never have the same coordinates. If this is not the case, then an index list would have to be stored for each point).

var lineIndexes = new Dictionary&lt;Point, int&gt;();

//TODO: add the points of the line to the dictionary

foreach (int i = 0; i &lt; subline.Length - 1; i++) {
    Point sublinePoint1 = subline[i];
    Point sublinePoint2 = subline[i + 1];

    int k; // Index in line.
    If (lineIndexes.TryGetValue(sublinePoint1, out k) &amp;&amp;         // We found one matching point AND
        ( k &gt; 0 &amp;&amp; sublinePoint2.Equals(line[k - 1]) ||              // (previous one matches OR
          k &lt; line.Lengh - 1 &amp;&amp; sublinePoint2.Equals(line[k + 1]))) {//  next one matches)

        return true;
    }
}
return false;


This is \$O(n)\$, since the dictionaries have a constant access time.



Equal vs. Equals

Every object (other than System.Object) inherits Equals and GetHashCode from System.Object. Do not introduce your own Equal method but override Equals and GetHashCode in your own objects. This is necessary for right functioning of the dictionary and other .NET data structures.

If you cannot do that, there are overloads of the dictionary's constructor accepting an IEqualityComparer&lt;TKey&gt;. Provide your own implementation of IEqualityComparer&lt;Point&gt;.