Это может показаться немного элементарным, но вы пытались добавить флаг? У вас уже есть логическое значение с mouse_over, поэтому для меня имеет смысл иметь что-то вроде:
if player.rect,collidepoint(pygame.mouse.get_pos()):
if(mouse_over==False):
mouse_over=True
print(True)
player.image.fill(RED)
else:
if(mouse_over==True):
mouse_over=False
print(False)
player.image.fill(GREEN)
Таким образом, mouse_over действует как флаг и позволяет оператору печати запускаться только один раз и изменять image.fill один раз. Image.fill можно изменить для запуска каждый раз, просто избавившись от одного отступа.
Хотя я не уверен, для чего вы используете mouse_over, поэтому вы можете решить создать новый флаг. Его все равно нужно будет проверить и изменить, например, как mouse_over, просто с другим именем переменной.