A spatial join matches rows by where they are, not by a shared key. To count points inside polygons, the areas are the target and the points hand over their attributes. A point on a shared boundary intersects both areas, so it is counted twice; with Contains Clementini it matches neither.