You are correct, there is some strange adjustment going on in ns_draw_fringe_bitmap:
/* NS-specific: move internal border inside fringe */
int x = p->bx < 0 ? p->x : p->bx;
int wd = p->bx < 0 ? p->wd : p->nx;
BOOL fringeOnVeryLeft
= x - WINDOW_LEFT_SCROLL_BAR_COLS (w) * WINDOW_FRAME_COLUMN_WIDTH (w)
- FRAME_INTERNAL_BORDER_WIDTH (f) < 10;
BOOL fringeOnVeryRight
= FRAME_PIXEL_WIDTH (f) - x - wd - FRAME_INTERNAL_BORDER_WIDTH (f)
- WINDOW_RIGHT_SCROLL_BAR_COLS (w) * WINDOW_FRAME_COLUMN_WIDTH (w) < 10;
int xAdjust = FRAME_INTERNAL_BORDER_WIDTH (f) *
(fringeOnVeryLeft ? -1 : (fringeOnVeryRight ? 1 : 0));
Now, if you set xAdjust unconditionally to zero, the problem goes away. I don't yet know the rationale for this. It may be something that was needed at some point, or is needed on some systems. What OSX version are you running?