It is not an easy question to answer, but I will try using some examples as they might sound the same to learners.
The verb '움직이다' sounds more general than '옮기다' or '이동하다'. For example, if you find a person unconscious who can move only his eyes, you can ask
내 말이 들리면 눈을 움직여 보실래요? (Literally) Can you move your eyes if you hear me?
Here, '움직이다' means a very small movement. How far can you move your eyes? Not very far. Therefore, if you say "책상을 움직였다." you never know whether you moved it an inch to balance it or to move it to another room. But it is more likely that people would understand you moved it a little bit so that you can find something or adjust its balance.
'옮기다' implies moving from A place to B place. It is a causative form of the verb '옮다' which means 'catch (a disease or infection)'. A disease should (literally) move from one patient to another if he gets infected. Therefore, 옮기다 has this connotation. If you say, "책상을 옮겼다." it would mean you moved a desk from A place to B place.
You could consider using '이동하다', but it sounds less colloquial because '이동' is from Chinese characters.
You can never use '이사하다' as it means (as you mentioned) moving to a different house unless you want to make a joke.
내 말이 들리면 눈을 옮겨 보실래요?
It sounds very weird because there is no place to move your eyes to.
내 말이 들리면 눈을 이동해 보실래요?
It sounds weird, too, albeit not as much as "눈을 옮겨 보실래요?".
I don't think there is a different word that indicates how you moved it (carrying, pushing, etc.). '밀어서 움직이다, 옮기다, 이동하다' mean 'move something by pushing it' and '들어서 움직이다, 옮기다, 이동하다' mean 'move something by lifting it'.