This will cause us to draw outside of the destination when the image is both enlarged and rotated.
That if statement is there to make sure we only draw to the area inside the shape defined by the points array. src_pointf should be within the range defined by srcx/srcy/srcwidth/srcheight if and only if (x,y) is within that shape. If that's not the case, it probably means we're calculating src_pointf incorrectly for the whole image, not just the edges.
I'm not sure Sebastian realized this, but in this case GdipBitmapGetPixel is different from reading the image directly. Because PixelFormat32bppRGB does not store alpha data in the bitmap, GdipBitmapGetPixel will always return an alpha value of 255, and you will get a non-zero value even if the pixel is black. I suggest testing for the exact value you expect. That should also remove the need for the trace() calls.