I had the same problem. This seems to be caused by one of Wordpress' native functions force_balance_tags. This function worked before as well on the content of your blog but for some reason exec-php executed before this filter. In any case, the way I resolved it is I added these lines to exec-php file /include/runtime.php function filter_user_content($content).
if(strpos($content,'< ?php ')!==FALSE)
{
$content=str_replace('< ?php','<?php',$content);
}
Now it executes the code properly. The problem with this approach is that once you upgrade exec-PHP and they do not include this fix or provide another one for this particular problem you will again have this nasty bug. I resolved this by making a small plugin of my own called my-fixes.php. Put it in the plugins folder. and has this code in it:
add_filter('the_content', 'my_filter_php_tag', 0); //fix for exec-php plugin and wordpress 2.8 and messed up php tag
function my_filter_php_tag($content)
{
if(strpos($content,'< ?php ')!==FALSE)
{
$content=str_replace('< ?php','<?php',$content);
}
return $content;
}
Hope this helps...