Yeah, just swap these subroutine calls:
Code:
jsr update_enemy_sprites
jsr movesprites
Like this:
Code:
jsr movesprites
jsr update_enemy_sprites
So that the reference sprite is positioned first, and then the others are positioned based on it.
Now, I have to second what Denine said. Moving sprites and updating objects is not something you should be doing during vblank. There are only 20 or so scanlines of vblank, which is not enough time to process game logic AND update the PPU (unless you're making PONG). What you have to do is update the PPU first (OAM DMA, name tables, palettes, etc. and finally the scroll), to make the most out of the vblank time, and then you take care of the game logic.
Also, if you're planning on making a game with dynamic objects, hardcoding their sprites to fixed OAM positions is a very bad idea. It's a bad idea even if you have the same set of objects all the way through the game, but it makes implementing dynamic objects nearly impossible.
Normally, the A.I. and physics should not act upon OAM slots, but object slots. Each object should be modeled somewhere in RAM, where all of its attributes (position, speed, state, health, etc.) will be. That's what should be updated every frame. And then, once all objects are in their final positions, the meta-sprite system peeks into the object slots and uses the position and (usually) meta-sprite pointer of each object to render its sprites to a dynamic position in OAM (not a hardcoded one).