I don't think it has anything to do with zsh vs sh. I believe it has to do with subprocessess of emacs not having the path required to find the biber executable, whereas interactive shells apparently do.
Try adding the path to exec-path: evaluate the following form
(add-to-list 'exec-path "/usr/bin/vendor_perl") and try your latexmk run. If that works, add the line to your init file, restart emacs and test again.
EDIT: The doc string for exec-path says:
List of directories to search programs to run in subprocesses. Each element is a string (directory name) or nil (try default directory).
so it should resolve the sh: biber : commande introuvable done in the subshell, particularly since you say that in an interactive sh, doing which biber finds the executable. Not sure why you are still having problems.