<p>They both seem to be sending data to the server inside the body, so what makes them different?</p>

PUT is meant as a a method for "uploading" stuff to a particular URI, or overwriting what is already in that URI.
POST, on the other hand, is a way of submitting data RELATED to a given URI.
Refer to
the HTTP RFC