In case anyone comes across this and doesn't/can't have permanently sorted data...
Was thinking about this some more this evening, trying to come up with a way to solve the case where the dataset isn't permanently sorted using the field calculator... Don't think it's possible using the calculator since to the best of my knowledge you can't do a look-ahead/sort, but using the Python window this should work:
def applyRanks(layerName, valueField, rankField):
# Read the values from the dataset
allValues = set()
with arcpy.da.SearchCursor(layerName, [ valueField ]) as searchCursor:
for row in searchCursor:
allValues.add(row[0])
# Create a value/rank lookup
lookup = { value : rank + 1 for (rank, value) in enumerate(sorted(allValues, reverse=True)) }
# Set the ranks on the rows
with arcpy.da.UpdateCursor(layerName, [valueField, rankField]) as updateCursor:
for row in updateCursor:
row[1] = lookup[row[0]]
updateCursor.updateRow(row)
Once added to the Python window, a call like this (using the fields from the original question) should apply the ranks:
applyRanks("theLayerName", "EPDO", "RANK_EPDO")