I haven't heard of this Internet Explorer glitch in the past, but I'm not terribly surprised to hear it exists. I'm not sure what version of IE you're using (perhaps this has been fixed in a newer version), but regardless, you want this to work for everyone anyway. I searched around a bit for solutions, but didn't actually find this bug documented anywhere.
You could use a JavaScript solution, but that's a bit complicated and not good for accessibility.
You understand that the reason this is an issue at all is because non-valid URL characters (like spaces, the @ sign, etc), need to be encoded in the URL (that's what the %40 is). It seems that while Firefox and Chrome successfully encode the character, IE just drops it (in your case at the least).
So, instead of using GET, a simple solution would be to use POST. With POST, the variables are not encoded in the URL, and we sidestep the problem entirely. Just do the following:
1. Change your small form's method attribute to "POST"
2. Add a shortcode to handle grabbing POST variables. It'd look something like this:
function my_get_post_value_fcn($atts){
extract(shortcode_atts(array(
'key' => -1,
), $atts));
if($key == -1) return '';
$val = $_POST[$key];
return $val;
}
add_shortcode('get-POST-value', 'my_get_post_value_fcn');
3. Change your dynamic text values in the Contact Form to something like:
[dynamictext* email "get-POST-value key='email'"]
(You'll use the new POST function for all of them.)
Note that I haven't tested these functions. I'll also add a POST shortcode like the one I described to my list of updates for the next plugin release.
Hope that helps!