How can I make my custom templates respect permissions?

Message you quoted is being generated by members_content_permissions_protect() function. By default it is used as a filter on the_content() and the_excerpt() functions. Since your custom template doesn’t use these – there is no case for function to run.

Try something like this in template:

$content="Content to protect";
echo members_content_permissions_protect( $content );

Another idea:

$protected = members_content_permissions_protect( false );

if( false !== $protected ) {

    echo $protected;
}
else {

    //template stuff goes here
}