You can do it all in one pass using an update cursor, if I understand what you are trying to do. I will post some code tomorrow.
UPDATE: In terms of specifics, there are still a couple of things I am unclear about. For example, where does LegacyGUID come into play. Also, what is the target field you want to update with the LegacyID of the lowest ObjectID of the group?
For the code below, I am using LegacyGUID as the target field to be updated, but it is simple to change the field. In the code below, case_fields can be multiple fields if you want the grouping of data to be based on more than one field.
import arcpy
from itertools import groupby
from operator import itemgetter
fc =
case_fields = ["LegacyID"]
sort_field, sort_order = "OBJECTID", "ASC"
source_field = "GlobalID"
target_field = "LegacyGUID"
fields = case_fields + [sort_field, source_field, target_field]
sql_orderby = "ORDER BY {}, {} {}".format(
", ".join(case_fields), sort_field, sort_order
)
with arcpy.da.UpdateCursor(fc, fields, sql_clause=(None, sql_orderby)) as cur:
case_func = itemgetter(*range(len(case_fields)))
for key, group in groupby(cur, case_func):
row = next(group)
source = row[-2]
row[-1] = source
cur.updateRow(row)
for row in group:
row[-1] = source
cur.updateRow(row)
del cur