I got around the problem by creating a Class that extends MakeForm. The new class has a duplicate of the method processForm, but with this one line removed:
$success= $object->save();
I must say it still feels a bit strange updating every property of an object with the entire $_POST array without any kind of checking.
Wouldn't malicious users be able to update, for example, the username and password of a WebUser, even though the form has no input fields for those?
I guess the alternative is to manually update the entire object with just the variables you want.
Is there a compromise?
I don't think of it as a need to compromise, but rather as having a choice depending on the task at hand. You can always remove unwanted $_POST variables very easily, and still have the convenience of using the $_POST var. You can also apply stringent validation in your schema and/or via API.
Also, why wouldn't you just create the form from the object in both cases, which is loaded from the database always, and overridden from the POST using fromArray() when a POST is made? This way you don't have to extend the MakeForm class.