I think rather than trying to rearrange the actual DOM elements, you would be better off moving the data around since everything on the back end is tied to the Field identifiers.
For example, if you move Field1(1) down and move Field1(2) up, they are still the same objects storing the same values so really you are just changing the display, not the data order.
To change the order of the data in a way that will hold from one step to the next, you should do something more like the following:
Set two JavaScript variables for each column, store the current values of those fields, then assign the values back to the new fields.
For example,
// Note that the Index of a row is actually 1 off from the number in the
// Field id attribute because I believe those start at 1 instead of 0
// The upper row 'index'
var topRow = 1;
// The lower row 'index'
var bottomRow = 2;
// Store the current values of each row
var topField1 = $('#Field1(' + topRow + ')').val();
var topField2 = = $('#Field2(' + topRow + ')').val();
var bottomField1 = $('#Field1(' + bottomRow + ')').val();
var bottomField2 = $('#Field2(' + bottomRow + ')').val();
// Swap the rows
$('#Field1(' + topRow + ')').val(bottomField1).change():
$('#Field2(' + topRow + ')').val(bottomField2).change():
$('#Field1(' + bottomRow + ')').val(topField1).change():
$('#Field2(' + bottomRow + ')').val(topField2).change():
This is just some rough code since I don't know what your actual process looks like and there's a lot that would need to change for it to work correctly, but it should hopefully give you a general idea of what needs to be done.
Adding .change() at the end after you set the new value is necessary to ensure that the new value holds and will show correctly on the next form.
This way you are not moving elements around on the page, you are actually sorting the data between table rows to ensure your resorting will actually be preserved.