Saving zero in meta box

Your issue seems to be with too loose logic check, rather than saving.

To treat valid but falsy value correctly you need something like this:

if ( false !== $meta_value )

This will strictly match only the case when value doesn’t contain false (return of the API when fetch failed).