The geotiff spec on geotiff.maptools.org states if you want to display a PixelIsPoint raster, the origin is shifted to (-0.5, -0.5). The "point" remains at (0,0), it is just displayed as the centre of the pixel.
If a point-pixel image were to be displayed on a display device with pixel cells having the same size as the raster spacing, then the upper-left corner of the displayed image would be located in raster space at (-0.5, -0.5).
A PixelIsArea raster pixel centroid is therefore (0.5,0.5), so your point "C2" is correct.
Your demo picture has the origin 0,0 at the lower left, so I assume you're talking about coordinate space (X, Y) not raster space (col, row). Note the geotiff spec refers only to raster space (col, row).
this spec shall not refer to "X" and "Y" raster coordinates, but rather to raster space "J" (row) and "I" (column) coordinate variables instead, as defined in section 22.214.171.124.
Don't forget the values in the
ModelTiepointTag are the coordinates of the upper left of the raster (0,0 in raster space) so convert that to coordinate space (calculate the lower left of raster or for each pixel) before adding (0.5,0.5) to calculate the coordinates of the centroid of a PixelIsArea pixel. If you don't, and are calculating from the upper left of the pixel, use (0.5,-0.5).