I was just about to come here and post the solution I came up with. While it's probably a little bit of a dirty hack, it seems to work just fine in this case. What I did was create a method inside the model that I can then access via a control. Here's my method:
public function ContactForm(){
$cf = new ContactPage_Controller;
$cf->init();
return $cf->ContactForm();
}
I put this inside the model (duplicate method name as the one inside the controller, so perhaps a bit confusing). To access this, I use the same means as I had originally been attempting with the controller method:
<% control Page(contact) %>
<% control ContactForm %>
...
<% end_control %>
<% end_control %>
The form seems to work just fine, including any error handling and success pages.