Got it working! 
Traditional way in WP
Create a file called page-example.php and make sure you add the header at the top and custom code
<?php
/*
Template Name: Example Page Template
*/
?>
<?php
get_header()
// add custom layout and loop code
get_footer()
Then you create a new page in the WP admin and set the page template on the Page Edit Screen to "example page template". Now whatever code is in the page template will load when that page is loaded based on the hierarchy.
Getting the same result in Warp
1) Create a file called page-example.php and make sure you add the header at the top. This is important so it can be selected on the Page Edit Screen's page attributes.
<?php
/*
Template Name: Example Page Template
*/
?>
Here is where it is different.. instead of adding the code as you would in WP you tell it to get the layout with the same name
<?php
// get warp
$warp = Warp::getInstance();
// load main template file
echo $warp['template']->render('template');
Note the render('template'); bit that's the important part! It tells warp to load the main template.php and add whatever is in layouts/page-example.php (step 2) where $content is called. Once we have done step 2 and 3 this will work.
2) Now create another page-example.php and put it inside the main templates /layouts/ folder so you now have 2 files with the same name, one in the template root and one in the layouts.

Inside this file you add the code you want to output on the page. This is essentially the loop and whatever wraps around it. Since this will be output into the template.php where we call the render('content') section.
<div id="system">
<h3>My Custom Page</h3>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<article class="item">
<header>
<h1 class="title"><?php the_title(); ?></h1>
</header>
<div class="content clearfix"><?php the_content(''); ?></div>
<?php edit_post_link(__('Edit this post.', 'warp'), '<p class="edit">','</p>'); ?>
</article>
<?php endwhile; ?>
<?php endif; ?>
<?php comments_template(); ?>
</div>
3) Copy warp/systems/wordpress/layouts/content.php to the main templates layouts/ folder so we can override it.
Now in the new file we modify the is_page() part to check for our page template as well
elseif (is_page()) {
$content = 'page';
Becomes
} elseif (is_page()) {
if (is_page_template('page-example.php')) {
$content = 'page-example';
} else {
$content = 'page';
}
So instead of this
if (is_home()) {
$content = 'index';
} elseif (is_page()) {
$content = 'page';
} elseif (is_attachment()) {
$content = 'attachment';
} elseif (is_single()) {
$content = 'single';
} elseif (is_category()) {
$content = 'category';
} elseif (is_search()) {
$content = 'search';
} elseif (is_archive() && is_author()) {
$content = 'author';
} elseif (is_archive()) {
$content = 'archive';
} elseif (is_404()) {
$content = '404';
}
You will have this
if (is_home()) {
$content = 'index';
} elseif (is_page()) {
if (is_page_template('page-example.php')) {
$content = 'page-example';
} else {
$content = 'page';
}
} elseif (is_attachment()) {
$content = 'attachment';
} elseif (is_single()) {
$content = 'single';
} elseif (is_category()) {
$content = 'category';
} elseif (is_search()) {
$content = 'search';
} elseif (is_archive() && is_author()) {
$content = 'author';
} elseif (is_archive()) {
$content = 'archive';
} elseif (is_404()) {
$content = '404';
}
That works perfectly!! Now when I load the page that is assigned to this page template, whatever is in my layouts/page-example.php (loop part) will be output inside the layouts/template.php wherever the render content is called.
<?php echo $this['template']->render('content'); ?>
This in theory will work for pretty much anything in the hierarchy. While it is not perfect, it is a workable solution.
If someone else can test this out, that would be great.
Andy