The move command does work on AI factions, and as far as I know you can use it at any time whether during the human's or AI's turn, but it won't do anything if there is another character in the residence already. You can only use it to move single AI characters into empty residences. You can, however, use it to move as many of the player's characters as you want into a residence so you can use the control command (in hotseat) to move multiple AI characters into residence.
Code:
monitor_event PreFactionTurnStart TrueCondition ;start of turn 0
if I_IsFactionAIControlled venice
set_event_counter venice_is_ai 1
console_commmand control venice ;switch venice to human control
end_if
move cercei_label_1, x, y ;if venice is already human, we don't need to switch control
move tomen_label_1, x, y
if I_EventCounter venice_is_ai == 1 ;if venice is supposed to be AI-controlled in this campaign, switch them back
console_command control venice
end_if
;... do whatever other campaign setup you need to do at the start of turn 0
terminate_monitor
end_monitor
To answer some earlier questions: you definitely don't want to use move_character to move a character into residence. As you already know, they won't actually move into residence but will bug out on top and possibly become unmovable from that position. Tangential to this point - script commands and console commands are different things. For single player I guess it's fair to say that the only difference is that console commands must be prefixed with "console_command" in campaign_script, but if you want to use my solution above or otherwise ever have your mod be playable in hotseat mode, then you will find there is a big difference between script commands and console commands. Namely, most hotseaters password-lock the console which kills all console commands in script. There are script solutions for this but that's the subject of another thread.
As for locking characters in place, I definitely recommend using the mp console command as Serious Potato said. Large settlements probably have roads or can be upgraded to have roads and road bonuses are liable to get your characters over 0 and let them start walking around the map 1 tile at a time. The mp command kills that movement entirely and can be issued continuously every CharacterTurnStart or whenever is most appropriate.