you cannot update your FID field, so you need to create a new feature class where you insert the polygons in the order that you want. However, this is not necesseraly a good idea because the FID could change in case of an edit session. Anyway, the first step is a spatial join to get the attribute of the lines that are inside your polygons. In order to avoid ambiguous spatial relationship, I recommend to do this spatial join using the center point ("feature vertices to point" with "MID" option), but this is not necessary.
In Python, you can use arcpy.da.searchCursor(subshed, ("joint_subriver_FID_FIELD" , "SHAPE@"))
You then loop on the cursor to create a Python tuple
You sort this tuple based on its first element
You create un insertcursor on an empty shapefile
You make a second loop to insert your rows in the order that you want
EDIT :
First step : assign the FID of the polylines to the polygons. Create points to avoid ambiguities between lines and polygon when joining. Create a copy of the line FID field to make sure that it will be transmitted to the points.
arcpy.featureVerticesToPoints_management("lines.shp", "points.shp", "MID")
arcpy.SpatialJoin_analysis("polygon.shp", "points.shp", "joinpolygon.shp")
Now you have a new polygon layer with the attributes of the lines. You then need to create a new shapefile of type "polygon" that will store the new geometries. The shapefile should also contain the fields that you want to keep. Based on these two shp (jointpolygon.shp and newpolygon.shp), you can use the following Python script.
fc = "C:/jointpolygon.shp"
sc = arcpy.da.SearchCursor(fc, ("FID_from_lines", "otherfield","SHAPE@))
storage = []
for row in cursor:
storage.append(row)
sortedlist = sorted(storage, key=lambda x: x[0]) #sort based on line FID
poly = "C:/temp/newpolygon.shp"
fcout = arcpy.da.InsertCursor(poly, ("FID_from_lines","otherfield","SHAPE@"))
for i in sortedlist:
fcout.insertRow(i)
del fcout, sc