You have a couple of issues here that should be addressed.
First, you cannot use git fetch --all and specify a remote. --all means to fetch all known remotes, which doesn't make sense when you specify just one remote on the command line. If you need to pass credentials to Git for an existing remote, write the URL you have into a temporary file, and then use the -c option to pass a credential helper on the command line, like so:
DIR=$(mktemp -d -t "$TMP/tmp.XXXXXX")
echo "$USR_CREDENTIALS" >$DIR/creds
git -c credential.helper="store --file=$DIR/creds" fetch --all --prune
rm -fr "$DIR"
If you want to fetch just a single remote, then you can do the same thing as above, just replacing --all with the name of the remote corresponding to the URL.
Note that the -c option here must come before the fetch subcommand.
You can also accomplish this by running the following, but be aware that anyone on the system and anyone with access to the repo can see your password in plain text if you do this:
git fetch "$USR_CREDENTIALS" "$BRANCH_NAME"
git checkout -b "$BRANCH_NAME" FETCH_HEAD
It will also not fetch the remote tracking branches for origin.
Second, you cannot mix options and non-option arguments like you're doing. It may happen to work in some cases, but you'll find that there are edge cases where it's broken. Unless you're passing configuration options (i.e., git -c), all options (i.e., those things starting with -- and -) need to come before any non-option arguments and after the subcommand.
Third, the issue you're seeing with git checkout means that origin/$BRANCH_NAME doesn't exist on the local system. It's possible that it's on the remote server, but not on the local machine. If your fetch succeeds and the remote server contains a server with the appropriate branch name, your command should work.
git fetchseems odd to me, it looks more like agit cloneargument.--allshould work (as the error message suggests).