When I move one of the vertices from the torso of my figure, it's like there's a second mesh under the surface. I've tried A > M > Merge By Distance and pretty much all the options in Edit Mode menu Mesh > Clean up but the problem's still there. Is this normal or did I mess up while I was modeling earlier? Also why aren't the edges joined?
It looks like this could be caused by your mirror modifier.
Click the monitor button in that modifier to hide its visibility. I suspect you'll still see a full mesh rather than just half.
Often when you create the mirror modifier, you may sometimes forget that this is the case. I often have this issue. It's mirroring both halves of your mesh onto the respective other side, but the reflection is not editable by default and obviously gives you dupes.
The solution is to make sure there is a loop of vertices around your model that sit perfectly along the plane of the mirror. Now, in X-Ray mode or wireframe mode, select all vertices on one half of the model (not including the centre loop I just described), and delete them. For best results, identify which side of your model features the edits you made while the mirror was active, then decide which to delete based on this information. Once you've deleted half your model, re-enable your mirror.
Hope that helps.
If I understand well after the mirror you get some extra edges. In this case use these steps:
Select your mesh, and use Decimate to see what edges are separated when you mirror. You will see separated edges, use undo back to the initial mesh and with Shift + Alt and click select that edges and delete. After that, you will have a clean mesh.