Como eu já disse no meu comentário, quando você corre a linha
updated_regex="<version>${main_version}\.${feature_version}\.${patch_version}${tag}<\/version>"
a variável updated_regex
será atribuída a essa string, onde todas essas variáveis serão expandidas no momento em que você executar essa linha.
Quando você executar a linha sed
, esta string será usada, mas as variáveis dentro da linha superior não serão expandidas novamente. Então a solução é usar o seguinte:
regex="<version>[0-9]*\.[0-9]*\.[0-9]*[^<]*<\/version>"
sed "s/$regex/<version>${main_version}\.${feature_version}\.${patch_version}${tag}<\/version>/1" pom.xml