As a general statement that you already know, it would save time (it's probably not a big deal at the end of the day) to shift right by two whenever you want to divide by 2.
Second general statement is that RaiseHP should store a flag on the stack for a message for healing moves.
EDIT: Third general statement Fire type moves like V-create should call 0x02307C78 (which I have called TryThawTarget) first because fire type moves thaw frozen targets. 0x02307C78 takes user in r0, and target in r1.
EDIT: Fourth general statement, for secondary effects that are guaranteed (like for Icy Wind/Inferno), RandomChanceUT needs to be called with guaranteed chance anyway (0) because of the check for Shield Dust is inside of it...
Soak
This should probably fail if the user's ability is Forecast like Conversion and Conversion 2 does. I haven't tested it so I don't know if it actually causes issues when the weather changes, but it may be a necessary fix. Also, when the type of a Pokemon is changed from the default 0xFF in their struct is set to 1. See (DoMoveConversion, DoMoveCamouflage, or 0x022F94F0)
As a general statement that you already know, it would save time (it's probably not a big deal at the end of the day) to shift right by two whenever you want to divide by 2. Second general statement is that RaiseHP should store a flag on the stack for a message for healing moves. EDIT: Third general statement Fire type moves like V-create should call 0x02307C78 (which I have called TryThawTarget) first because fire type moves thaw frozen targets. 0x02307C78 takes user in r0, and target in r1. EDIT: Fourth general statement, for secondary effects that are guaranteed (like for Icy Wind/Inferno), RandomChanceUT needs to be called with guaranteed chance anyway (0) because of the check for Shield Dust is inside of it...
Entrainment It should probably call 0x022FA7DC before the end like in Skill Swap to see if the new ability on the target should end any current effects on the target. For example, if Own Tempo should end confusion. https://github.com/Adex-8x/EoS-ASM-Effects/blob/main/moves/gen5/entrainment.asm
Acrobatics It may not be necessary, but in case the value of the held item is stale (I can't think of any examples in the game where it does this) you may want to check the existence bitflag just in case. https://github.com/Adex-8x/EoS-ASM-Effects/blob/b6ff03d305a4057ef692fab63c527adf3d637088/moves/gen5/acrobatics.asm#L31-L33
Hex Unfortunately, I think the sleepless status from worry seed (and maybe uproar) also uses 0xBD so you may want to check if the target is actually asleep. https://github.com/Adex-8x/EoS-ASM-Effects/blob/b6ff03d305a4057ef692fab63c527adf3d637088/moves/gen5/hex.asm#L31-L33
Parabolic Charge DoMoveDamageDrain sets 0x108 (related to exp if the target dies if I recall) to 1 if it is equal to 0 for the user. So, I would assume you may want to do it here. https://github.com/Adex-8x/EoS-ASM-Effects/blob/main/moves/gen6/parabolic_charge.asm
Topsy-Turvy We definitely talked about this one, but I think there was something you needed to change. https://github.com/Adex-8x/EoS-ASM-Effects/blob/main/moves/gen6/topsy-turvy.asm
Speed Swap I think you should call UpdateStatusIconFlags at the end. It's called at the end of both LowerSpeed and BoostSpeed. https://github.com/Adex-8x/EoS-ASM-Effects/blob/main/moves/gen7/speed_swap.asm
Poltergeist Similar to acrobatics, you may want the check the item existence flag. (I can't think of anything in base game where the value is not properly changed, but it is checked first in the game.) https://github.com/Adex-8x/EoS-ASM-Effects/blob/b6ff03d305a4057ef692fab63c527adf3d637088/moves/gen8/poltergeist.asm#L35-L37
Steel Beam Reminder to add the max HP boost to the health. https://github.com/Adex-8x/EoS-ASM-Effects/blob/b6ff03d305a4057ef692fab63c527adf3d637088/moves/gen8/steel_beam.asm#L37-L38
Spectral Thief Probably should call UpdateStatusIconFlags at the end for both targets. https://github.com/Adex-8x/EoS-ASM-Effects/blob/main/moves/gen7/spectral_thief.asm
EDIT: