Store and replace mesh
Make a copy
simple answer is `
self.backup[obj.name] = obj.data.copy()

without making a copy you had a reference to the same mesh.  If you are using bpy.ops.mesh.convex_hull suggest instead using bmesh see
Is there any way to make multiple objects convex hulls?
Convex Hull as Mesh
The data is already stored for us in the blend file data,
me = context.object.data

which without any renaming of meshes inbetween is still
bpy.data.objects[me.name]

Hence could simply keep the name, make a new mesh with another name for convex hull and swap using meshes retrieved via names.
If after creating a convex hull mesh and want to have it available permanently An approach to consider would be giving a mesh object a pointer property to the mesh of its convex hull.
bpy.props.Object.convex_hull_mesh = PointerProperty(type=bpy.types.Mesh)

create convex hull mesh and assign it to this property to save it.  Another boolean property could be used as a flag to swap between original and convex hull mesh.