Kind of solved:
If I prevent the function from break-ing out of the loop once I’ve found the element I need the process works correctly.
If I break out at the point of finding the element I need the next time the function runs it continues where it left off in the previous loop and therefore misses repeated searches.
function get_column_content($columnId){
while(have_rows("adv_columns",get_the_ID())){
the_row();
if(get_sub_field('column_id')==$columnId){
$found= get_sub_field('content');
}
}
return $found;
}