nonce in custom form is not verifying

Not sure if this answers the question, but you should call wp_nonce_field() with the fourth parameter ($echo) set to false:

// You are concatenating or not directly echoing the output, so:
. wp_nonce_field( 'register', 'registration_nonce', true, false ) .

And I said “not sure” because you said the posted data ($_POST) did include the nonce field, so check the form source (HTML) and make sure the nonce field is not being used twice or more, e.g.

<!-- 'register' action: wp_nonce_field( 'register', 'registration_nonce', true, false ) -->
<input ... name="registration_nonce" value="nonce" />
...
<!-- A different action: wp_nonce_field( 'foo-bar', 'registration_nonce', true, false ) -->
<input ... name="registration_nonce" value="nonce2" />

So in that case, assuming the valid action is register, then wp_verify_nonce( $_POST['registration_nonce'], 'register' ) is going to fail because the second nonce field above (for the foo-bar action) overrides the first one (for the register action).

Update

So you confirmed the duplicate nonce field issue indeed occurred, but now after you fixed that issue, you’re getting the error 500 on your form processing page, which I’m assuming is your custom sunday-signup/apps/save_registration.php file?

If so, then you should actually not submit to a static PHP file. Instead, use one of the early (or on-page-load) hooks in WordPress like template_redirect to process the form submission.

// Example using the template_redirect hook:
add_action( 'template_redirect', function () {
    if ( isset( $_POST['submit_registration'], $_POST['registration_nonce'] ) ) {
        if ( wp_verify_nonce( $_POST['registration_nonce'], 'register' ) ) {
            // your code here
            // ...

            // then redirect back, maybe..
            wp_redirect( wp_get_referer() );
            exit;
        } else {
            echo 'test error';
            exit;
        }
    }
} );

The above example should work, but the actual code which processes the form submission is all up to you. Just make sure you call wp_verify_nonce() and other WordPress functions in the right place.