A abordagem clássica seria usar sed:
cp "${filename}" "$(realpath ${filename} | sed s:/:__:g)"
A vantagem é principalmente portabilidade através de shells se você não necessariamente sempre usará o bash.
Claro, isso também permite que você renuncie ao script e apenas o faça com find:
find /base/path -type f -exec cp \{\} 'realpath \{\} | sed s:/:__:g' \;
O Find tem opções de classificação e filtragem que você pode usar se precisar delas para copiar apenas determinados arquivos.
edit: Essa configuração de localização funciona em um dos meus sistemas, mas não no outro. Em vez de resolver a diferença, apenas tornei mais portátil:
find /base/path -type f | sed -e "p; s:/:__:g" | xargs -n2 cp