Parrots do a weird behaviour by flying 1-2 blocks high then gradually falling down to the player, which in return, causes the parrot to mount on the player (seen in parrot_bug2). If you move because of the reason you want them to rest on the ground instead, it'll do the behaviour underlined, which is an annoying loop to run again to unmount the parrot to try to make them sit (they always try mounting on the shoulder). For the parrot_bug image, I went into a 2-block high area with a roof above to prevent that from happening. In a minute or two, when it somewhat rested on the floor, I managed to 'sit' the parrot, but again, it tried to do the underlined thing above, causing the parrot to have the flying animation whilst in a sitting phase.
The behavior you describe is as intended. Parrots, once tamed, will always try to sit on the player's shoulders, and you can only make them stop by sitting them down, or as you mentioned, going into an area that is not suitable for them to sit on you. Closing.