A handy little tip -- if you need to figure out if you're inside a forwarded action or not do this simple comparison:
if( $c->action eq $c->stack->[ -1 ] ) {
# We've not been forwarded yet
}
$c->action is the Catalyst::Action object for the current action and $c->stack->[ -1 ] is the Catalyst::Action for the current sub (which will always be the last item in the call stack).