BaseRecalibrator looks at ALL sequenced and aligned bases for mismatches to the reference genome.
It is assumed that these mismatches are as a result of sequencing error - unless, of course, they are SNPs. But since the whole point of using GATK is to find SNPs, obviously this part is not the most important part of the algorithm. Fortunately, if there is a SNP in the genome, it isn't going to effect BQSR's model that much if we erroneously include it when doing BQSR. This is because compared to the hundreds of thousands if not millions of single-base-sequencing-errors, single-base-SNPs are:
- no where near as frequent,
- should not significantly effect the metrics BQSR looks for, like bias in read position, etc.
So my advice is just run BQSR without a SNP list. You should be fine. If you have the time/patience to do your due dilligence, use a very simple SNP caller first - one that only calls SNPs if there are at least 3 or more non-duplicate reads supporting it - and use that output when running BQSR. It is highly unlikely that a simple sequencing error will be the cause of such called homo/hetero SNPs, which will improve BQSR's chances of creating an accurate model for your sequencer. Obviously this has problems too - but its a good tradeoff I think.
Regarding your second question about how can you have a homozygous SNP and a reference genome - the answer is really simple. An individual contains two copies of every chromosome, and the sequencing may be from multiple individuals. Thus, after sequencing just 2 individuals, you could have up to 4 different alleles for that 1 position. The reference sequence is decided to be the most common base at that position (in a species sense, not a read-depth sense), and occasionally for poorly sequenced genomes there are ties and someone has to make an arbitrary decision. So in your case, I imagine the shotgun sequencing comes from another individual - that's all.