Семантически, статический подход, кажется, имеет немного больше смысла. Оба, конечно, будут работать, но нестатический подход отдает приоритет одной точке над другой, и, кроме того, подразумевает, что point1 (метод, для которого вызывается add) может быть изменен в результате вызова.
Как разработчик, использующий ваши классы, если бы я увидел следующее:
Point p1 = new Point(1,2);
Point p2 = new Point(2,3);
p1.Add(p2);
или ..
Point p1 = new Point(1,2);
Point p2 = new Point(2,3);
Point.Add(p1, p2);
Моя естественная склонность состоит в том, чтобы предположить, что метод add () в нестатической версии изменяет point1, добавляя результат пункта 2. При статическом подходе становится более ясным (хотя и не гарантировано!), Что метод чисто и репрезентативные точки не изменяются.