You cannot simply change + and - anywhere when you like. Does it look logical? For that case Left and Up must be - . You can see this by looking at what the function returns. It returns the area where sprite is. If both were + it would result a simple dot that is located in down right corner of sprite, for + and - it is a rectangle all around player sprite what was wanted. So bugs are still elsewhere.

Also, you are using vx and vy varibles in GetCorners() function without multiplying it with TimeGap.