Yep, looks good to me. I don't use wrapping much so I haven't noticed this. I can imagine there will be more problems with wrapping with some other commands.
Your patch works correctly because SET_POS_NOX() doesn't update the remembered x position and subsequent SCI_LINEDOWN recovers it. It's real pity there's no getter for the remembered x position in Scintilla and that we have to do stuff like this.
@frlan Can be merged I think.