O problema na questão é que "var" é incrementado em um subshell iniciado por '-execdir', então o shell pai não obtém o valor alterado. Nesse caso, você não pode usar o recurso Localizar para fazer todo o trabalho para você, pois o rastreamento não acompanha o progresso.
Aqui está a solução que inclui o nome do link desejado e o que você quase usou no comando find, experimente e use o que você gosta.
export var=0
for F in $(find 2016 \( -name "*.CR2" -o -name "*.JPG" \)); do
FL=${F##*/}
echo ln -s "$PWD/${F}" "$PWD/2016_Links/Pictures/${FL%.*}_$(printf "%04d" $((var++))).${FL##*.}"
# or
echo ln -s "$PWD/${F}" "$PWD/2016_Links/Pictures/Link_$((var++))_${F##*/}"
done
Editar: No caso de nomes que contenham espaços, primeiro de todas as citações são uma obrigação, então uma pequena mudança para um loop diferente deve fazer o truque:
export var=0
find 2016 \( -name "*.CR2" -o -name "*.JPG" \) | while read F; do
FL=${F##*/}
echo ln -s "$PWD/${F}" "$PWD/2016_Links/Pictures/${FL%.*}_$(printf "%04d" $((var++))).${FL##*.}"
# or
echo ln -s "$PWD/${F}" "$PWD/2016_Links/Pictures/Link_$((var++))_${F##*/}"
done