What are you trying to do, exactly? I think there's more going on than a simple case of picking the right transformation. If file1="foo" and file2="foo.", then $file1:r == $file2:r and $file1:e == $file2:e, even though $file1 != $file2. That shows that you can't always reconstruct the exact filename given the :r and :e components.
Even if you decide to keep the dot with the extension, you can't use something like ${extension:+.$extension} to include it only when there's an extension, because both files have empty extensions and will not get a . that way. You still have to deal with the file. case explicitly somehow.
What are your assumptions, and what's the end goal?