Well, I see now why you were using the ob_start() and ob_end() orignially, because those let you capture the output to avoid having to change files like this. So, sorry if I misled you before, but it's difficult to answer one question without understanding everything you're trying to do.
So, there are two things you can do (well, at least two things): one would be to do like you were trying to do before:
PHP Code:
ob_start();
require_once('intuitco/cotw/functions/cotw_func_print_nom.php');
cotw_sotw_print_nom(true);
$cotw_print_nominations = ob_get_contents();
ob_end_clean();
vB_Template::preRegister('COTW_SOTW_NOMINATIONS',array('cotw_print_nominations' => $cotw_print_nominations));
The problem you were having before is that you were trying to include global.php which you don't need to do because it's been done already at this point. You probably just needed the "global $vbulletin" statement.
The second way would be to change your function to collect up the output in a string instead of the multiple calls to echo, then return the string at the end. If you aren't comfortable with doing that, then you should probably just try the first option.