How to duplicate an object and rename the original to have the "_high" suffix and the duplicate the "_low" suffix
For question code above put act_obj = context.active_object after the duplicate operator call.  Then it will be the duplicate of obj. if only one object is selected and active.
However also at play is the duplicate operator duplicates all selected objects. Try running with more than a single object selected.
You are only renaming the original obj if and when it is act_obj
However possibly much easier to use API calls and keep a ref to the newly created object and rename both based on original base name.
import bpy

context = bpy.context

for ob in context.selected_objects:
    name = ob.name
    copy = ob.copy()
    copy.data = copy.data.copy() # linked = False
    ob.name = f&quot;{name}_high&quot;
    copy.name = f&quot;{name}_low&quot;
    ob.location.x += 5
    context.collection.objects.link(copy)