That happens because the shape’s border is not aligned to the pixels. PS moves vector with sub-pixel accuracy, so when a part of the shape lies in 1/4 of a pixel (for example) it tries to compensate by making it clearer/more transparent. Move the nodes until they fall on whole pixels and that’ll fix it.
In addition to setting up grids and snap to grid by 1 pixel, I always use round rectangle for circles, because it “snaps” to the pixel grid, unlike the regular circle which is not, and nudging points using arrows only at 100% zoom level, at 100%+ nudging points using arrows will move the points in sub pixel unit. Setting up two view for a document (1 at 100%+ zoom and one at 100%) can be very helpful, one window at 100% just nudging points around.