Imagine 'Is overlapping at offset' like this: it takes the sprite's collision polygon, moves it from its current position by the x and y values specified, checks for overlaps and returns it to its original position. You can think of the x and y values for this function as if they were Sprite.X + entered x value, Sprite.Y + entered y value.
ImagePointX() and ImagePointY() however return the position of an image point on your layout. For example, if your sprite moves to the right both it's own X and ImagePointX() get bigger so the offset at which you check for an overlap gets bigger.
To fix this you need to enter a fixed value that doesn't change depending on your sprite's position, for example a simple number.
Finally because this is in relation to the sprite's position if you want to check left or above you need to use a negative value.