Here is some untested code that should do this. It assumes you want to skip over the first field which is ObjectID and that the summary field is the last field in your table. All other fields in between would be evaluated and included in the summary, although it should include logic to skip over the shape field or any GlobalID field. Of course the SUMMARY field needs to have at least as many characters in the field as the longest concatenation of field names and values possible to avoid a potential error of a string overflow:
updateFC = r"C:\workspacePath\featureClass"
updateFieldsList = arcpy.ListFields(updateFC)
with arcpy.da.UpdateCursor(updateFC, updateFieldsList) as updateRows:
for updateRow in updateRows:
strSummary = ""
for n in range (1,len(updateFieldsList) - 1):
if updateFieldsList[n] <> "Shape" and updateRow[n] <> none:
if strSummary > "":
strSummary = strSummary + ", "
strSummary = strSummary + updateFieldsList[n] + ": " + str(updateRow[n])
updateRow[n+1] = strSummary
The above should work for file/personal geodatabases and shapefiles (although shapefiles do not support text fields with more than 255 characters, so they probably won't work for this particular data). If this data is in a versioned SDE database or in a complex feature class with things like topology, feature-linked annotation, geometric network, etc. you will need to set up an Editor session and operation around the update cursor code.
However, if you set up an Editor session on a Feature Class with feature linked annotation and include any field that participates in an annotation label expression or label query definition in the update cursor field list those fields will be treated as modified fields by the Editor even if the values were not changed and the annotation will be rebuilt by the label engine and destroy any manual edits. This is a behavior I have reported to Esri and I am requesting that it be classified as a bug.