This may not make much sense but please read on.
I had a problem with scrolling background images. Set the two images in the right place. Moved both images at the same speed. The first image moves off the screen; the second image is placed next; the second image moves off the screen and the first image... you get the point? What has this got to do with fill? The problem I had with the moving images was a tiny gap between them. I forgot to account for the speed.
My theory, for the fill example is, you are testing the pixel directly beneath where you want to draw - If Point(x,y) <> c - instead of checking the pixel you want to move towards. eg: if you land on a line (or the edge of the screen) it could be too late because the fill routine is already placing pixels beyond the 'landing' point. I'm not sure if I am making sense. Perhaps, checking the pixel you intend to move to first - If Point(x+speed,y) or '1' in this case - will give the fill routine enough warning before going beyond the 'limits'? Just a thought... Similar system in platform games. When moving a character you don't check for collision when you are already in place. You always check 'ahead' to see if the character 'can' move in that direction. Would not the same system apply to the 'collision' of the fill pixels? Apologies for babbling...