Generally your validation should happen in the model; that's kind of the point of the MVC paradigm. Controller logic is about bouncing the user around between actions, views are purely for presentation, and business logic sits in the models.
Certain frameworks (CodeIgniter) diverge wildly from the intent of MVC by making models flat objects that have no logic (validation or otherwise) attached, requiring you to move your validation logic into the controller layer, but at that point your "models" aren't really models at all, but glorified arrays.
As far as having two actions "register" and "process_register", I find it's much cleaner to have one action, which responds differently to post and get requests. I'd call this action "create" to keep things RESTful, and have a route defined whereever your framework defines it's routes to map "/register" to "/user/create"
Example pseudo-php:
<?php
class User_controller {
// [GET|POST] /users/create
function create() {
$user = new User();
$error = '';
if (postback) {
// form has been submitted.
$user->name = $_POST['name'];
$user->password = $_POST['pasword'];
if (validate_user($user)) {
$user->save();
redirect("user/show/$user->id");
}
// user save failed, fall through to displaying the new user form
// the user's name and password (and other fields) are now populated,
// and will display
$error = 'Account creation failed.';
}
// Render the view with the user and the error message (if any)
render('views/users/create', $user, $error);
}
}
?>