You have to change also the selection because after exchanging the content the lower item is still selected.
Add this at the end of your handler:
m_clistctrl.SetItemState(item2, ~LVIS_SELECTED, LVIS_SELECTED);
m_clistctrl.SetItemState(item2 - 1, LVIS_SELECTED, LVIS_SELECTED);
m_clistctrl.SetSelectionMark(item2 - 1);