Convert paired-end BAM into a single-end BAM and keep all the reads
Like Devon pointed out, most likely you should sort out whether the files have been marked for duplicates correctly. 

You can also use samtools rmdup too

samtools rmdup &lt;bamfile&gt; &lt;output&gt;


Also, I find it very odd that 50% of the reads are lost when you keep only properly paired reads.

I would suggest removing the duplicates and then converting the bam file to a bed file. Macs2 can take in the bed format. Any extremely crude python script that converts a bam into a bed:

import pysam
samfile = pysam.AlignmentFile("test.bam", "rb")
open("test.bed", 'w').close()
f = open("test.bed", "a")
STRAND = ["+","-"]
for read in samfile.fetch():
    STR = STRAND[int(read.is_reverse)]
    BED =[read.reference_name,read.pos,read.reference_end,".",read.mapq,STR]
    f.write('\t'.join([str(i) for i in BED]))
    f.write('\n')
f.close()


You can also try the conversion with bedtools or definitely refine that script above with pandas etc.