CollectionProperty - change item's index
Use my_collection_prop.move(item_index, target_index), it let's you place a collection item (specified via its index in the current collection) to an arbitrary position in the collection.

In a collection with 3 items, you would call move(2, 0), to put the last item on top of the list. The other two items remain in order, there's no swapping of the source and target item:

import bpy

bpy.types.Scene.coll = bpy.props.CollectionProperty(type=bpy.types.PropertyGroup)
coll = bpy.context.scene.coll
coll.clear() # in case you re-run this script, empty the collection

# item 0
item = coll.add()
item.name = "First"

# item 1
item = coll.add()
item.name = "Second"

# item 2
item = coll.add()
item.name = "Third"

print("Before:")
for i, item in enumerate(coll, 1):
    print("{}. {}".format(i, item.name))

coll.move(2, 0)

print()
print("After:")
for i, item in enumerate(coll, 1):
    print("{}. {}".format(i, item.name))

"""
Before:
1. First
2. Second
3. Third

After:
1. Third
2. First
3. Second
"""