$columns that is being passed to your function my_edit_product_columns is an array of all of the existing columns. You can replace the entire thing or use any standard array manipulation to change the columns & column order.
For example, if you wanted to specify the columns you would do something like (taken from an events custom post type I use):
$columns = array(
"cb" => "<input type=\"checkbox\" />",
"title" => "Event Name",
"event_date" => "Date",
"start_time"=>"Time",
);
So if you simply print_r($columns) to see what it currently has, you could manually reorder it.
To insert your column at a specific position in the existing $columns array use:
# Insert at offset 2
$offset = 2;
$newArray = array_slice($columns, 0, $offset, true) +
array('new_column_id' => 'New Column Name') +
array_slice($columns, $offset, NULL, true);
See this thread for more on that: array_splice() for associative arrays
//ADDED
I just tested this out locally on a custom post type I have in use called products. This code works fine for me. The offset starts with column 1, so to make my new column be the second one, I set offset at 2.
public function productsListColumns($columns){
$columns = array(
"cb" => "<input type=\"checkbox\" />",
"title" => "Product",
"price" => "Price"
);
$offset = 2;
$newArray = array_slice($columns, 0, $offset, true) +
array('new_column_id' => 'New Column Name') +
array_slice($columns, $offset, NULL, true);
return $newArray;
}