It's okay, I got it working. I'd missed out passing ("id" => "$child_post->ID") to the $paneltype variable.
For the record, the full code with layout HTML is below.
<?php
$child_posts = toolset_get_related_posts( get_the_ID(), 'page-content', array( 'query_by_role' => 'parent', 'return' => 'post_object' ) );
foreach ($child_posts as $child_post)
{ ?>
<?php $paneltype = types_render_field("panel-type", array("id" => "$child_post->ID"));
if ($paneltype == 'regular') {
// Show Regular Panel ?>
<div style="background: <?php echo types_render_field( "panel-colour", array( "id" => "$child_post->ID", "raw" => "true" )); ?>">
<div class="row">
<div class="content-regular">
<h2><?php echo types_render_field( "panel-title", array( "id" => "$child_post->ID" )); ?></h2>
<?php echo types_render_field( "panel-content", array( "id" => "$child_post->ID" )); ?>
</div>
</div>
</div>
<?php } elseif ($paneltype == 'image') {
// Show Image Panel ?>
<div class="content-image" style="background-image: url(<?php echo types_render_field( "panel-image", array( "id" => "$child_post->ID", "raw" => "true" )); ?>);">
<div class="row">
<div class="small-12 columns">
<h2><?php echo types_render_field( "panel-title", array( "id" => "$child_post->ID" )); ?></h2>
<?php echo types_render_field( "panel-content", array( "id" => "$child_post->ID" )); ?>
</div>
</div>
</div>
<?php } elseif ($paneltype == 'two-column') {
// Show Two Column Panel ?>
<div class="row">
<div class="small-12 medium-6 columns">
<?php echo types_render_field( "panel-left", array( "id" => "$child_post->ID" )); ?>
</div>
<div class="small-12 medium-6 columns">
<?php echo types_render_field( "panel-right", array( "id" => "$child_post->ID" )); ?>
</div>
</div>
<?php } else {
// Show Nothing ?>
<?php }?>
<?php }?>
<?php wp_reset_query(); ?>