A simple approach here is to do:
our $i //= 28; That is still declare it as a package global variable to work around strict but only assign 28 if not already defined.
Alternatively, with zsh's zmv:
autoload -Uz n=28; zmv -n '(*_)<->(.png)' '$1${(l[3][0])$((n++))}' (like for most implementations of rename, -n is for dry-run).