TL;DR
Running COPY . /app
on top of an image with but slightly outdated source code creates a new layer as large as the whole source code,
My solution: (idea from https://github.com/neam/docker-diff-based-layers !)
docker rm -f uniquename 2> /dev/null
docker run --name uniquename -v ~/repo/mycode:/src ${REPO}/${IMAGE}:${BASE} rsync -ar --exclude-from '/src/.dockerignore' --delete /src/ /app/
docker commit uniquename ${REPO}/${IMAGE}:${NEW_TAG}