Linq version, reduces Search Area, by directly checking Target sequence in Search Area Instead of using SubListIndex.
var m = SearchImage.Length - 1;
return (from line in Enumerable.Range(0, SourceArea.GetUpperBound(0))
let Index = SubListIndex(SourceArea[line].AsEnumerable(), 0, TargetArea[m])
where Index != -1
let Test = SourceArea[line - m].AsEnumerable().Skip(Index).SequenceEqual(TargetArea[0])
let Test2 = SourceArea[line - (m / 2)].AsEnumerable().Skip(Index).SequenceEqual(TargetArea[m / 2])
where Test && Test2
select new Point(Index + (TargetArea[0].Length / 2), line + (TargetArea.Length / 2))).FirstOrDefault();