The difference should be whether any files with each name already exists. For example, if you have a file 0000_chain.pem already, then you will get 0001_chain.pem instead of 0000_chain.pem.
In every case, Certbot should try to save three new files.
When running certbot certonly with --csr, three files should be created on every run. If you are able to reproduce the behavior where you said you only had two files, instructions on how to reproduce it or a full log from the run would be helpful.
If you set any of --cert-path, --chain-path, or --fullchain-path, they will override the default location of the file and a file already existing at that location is an error.
The default location for these flags is in your current working directory with the names 0000_cert.pem, 0000_chain.pem, and 0000_chain.pem respectively. Currently and since the early days of Certbot, --chain-path and --fullchain-path have the same default location. I created https://github.com/certbot/certbot/issues/7546 to track us changing this behavior.
When Certbot goes to write these files, if the file already exists it increments the number at the beginning of the filename until an unused filename is found. The file for --chain-path is written first so assuming no other conflicts if the chain is n_chain.pem then the fullchain containing both the intermediate and the leaf certificate should be n+1_chain.pem.