I got tired of similar behaviors and so I turned off the Windows Aero effects and started using WindowPad instead. It is a heavily customized AutoHotKey script that you can run as a standalone EXE with an INI file to configure it to your tastes.
When you do the snap in Step 2, WindowPad is actually moving and sizing the window to that location, rather than "snapping" it, so you can then make some adjustments to the size or position and it won't come "unsnapped". There is a newer version of this called WindowPadX, but honestly I've never tried it because this does all that I need it to.
Below is my INI file, since I tweaked it a little from the default install, but it sounds like that's how you might want it. The [exclude] sections can probably be ignored. I think they are just there to keep WindowPad from messing with DisplayFusion, which I also have installed.
[Options]
TitleMatchMode=2
[Hotkeys]
[Hotkeys: Active Window (Numpad)]
*Numpad1 = WPM, -1, +1, 0.5, 0.5
*Numpad2 = WPM, 0, +1, 1.0, 0.5
*Numpad3 = WPM, +1, +1, 0.5, 0.5
*Numpad4 = WPM, -1, 0, 0.5, 1.0
*Numpad5 = WPM, 0, 0, 0.5, 1.0
*Numpad6 = WPM, +1, 0, 0.5, 1.0
*Numpad7 = WPM, -1, -1, 0.5, 0.5
*Numpad8 = WPM, 0, -1, 1.0, 0.5
*Numpad9 = WPM, +1, -1, 0.5, 0.5
*NumpadAdd = MaximizeToggle
*NumpadEnter = WindowScreenMove, Next
*NumpadDiv = GatherWindows, 1
*NumpadMult = GatherWindows, 2
[Hotkeys: Previous Window (Numpad)]
*Numpad1 = WPM, -1, +1, 0.5, 0.5, P
*Numpad2 = WPM, 0, +1, 1.0, 0.5, P
*Numpad3 = WPM, +1, +1, 0.5, 0.5, P
*Numpad4 = WPM, -1, 0, 0.5, 1.0, P
*Numpad5 = WPM, 0, 0, 0.5, 1.0, P
*Numpad6 = WPM, +1, 0, 0.5, 1.0, P
*Numpad7 = WPM, -1, -1, 0.5, 0.5, P
*Numpad8 = WPM, 0, -1, 1.0, 0.5, P
*Numpad9 = WPM, +1, -1, 0.5, 0.5, P
*NumpadAdd = MaximizeToggle, P
*NumpadEnter = WindowScreenMove, Next, P
*NumpadDiv = GatherWindows, 1
*NumpadMult = GatherWindows, 2
[Exclude Windows]
Process=displayfusion.exe
[Gather: Exclude Windows]
Window=ahk_class SideBar_AppBarWindow
Window=ahk_class SideBar_HTMLHostWindow
Window=ahk_class BasicWindow
[Gather: Exclude Processes]
Process=displayfusion.exe