Currently Catalyst expects ->print to return a truthy value on success. This is is likely because that's how perl's internal print works. That seems like a reasonable API and what most people using this module would expect. Currently it the return value appears to be undocumented, so clarifying that and making it always truthy should not break things.
While normally returning the thing printed would be a truthy value, ->print(0) or ->print("") would not.
I did also file a Catalyst-Runtime bug letting them know they're not correctly using String::Buffered and pointing them at this issue.