How to assign FloatProperty, EnumProperty etc values through script
The update method will be invoked every time you try to modify the value of this property, like a callback function. The manual do warn about infinite loop when your update method constantly do something to props.
As your code, each time you update a new value, you set the value instead of check the value then set. So each time you invoke update method, blender will trigger another update function since you &quot;set&quot; value that is supervised by Blender system.
Not sure how to avoid this behavior but you might check the condition first then change the value:
def SetPos(self, context):
    if need_clamp(self['left']):
        self['left'] = Clamp(self['left'],0,1)
    # so next time this method will do nothing

Or just use setter and getter function:
Property Definitions (bpy.props) — Blender Python API