Most interestingly enough if you use the following pattern to match it works fine...
$match_string = '/##if:[\s]*SESSION_SHOWPREFS##([^z]*)##fi:[\s]*SESSION_SHOWPREFS##/U';
It would seem that using (.+) is not matching something within the context of the subject... Any ideas?