By doing so:
row = SelectedPlayersHome.Rows[selectedIndex];
In fact you are not creating a copy of the row, but you assign a reference of the row to row
variable.
You should do sth like this:
DataRow row = SelectedPlayersHome.NewRow();
DataRow selectedRow= SelectedPlayersHome.Rows[selectedIndex];
row.ItemArray= selectedRow.ItemArray; // <-- copy data
SelectedPlayersHome.Rows.Remove(selectedRow);
SelectedPlayersHome.Rows.InsertAt(row, selectedIndex +1/-1); // depending if you want to go up or down