Para los amantes de C# :-D, cuál es la diferencia entre las excepciones producidas por Foo1 y Foo2?

using System;
class Program
{
    static void Main(string[] args)
    {
        try {
            Foo1();
        }
        catch (Exception ex) {
            Console.WriteLine(ex.ToString());
        }
        Console.WriteLine("------------------");
        try {
            Foo2();
        }
        catch (Exception ex) {
            Console.WriteLine(ex.ToString());
        }
    }
    private static void Foo1()
    {
        try {
            Bar();
        }
        catch (Exception ex) {
            throw ex;
        }
    }
    private static void Foo2()
    {
        try {
            Bar();
        }
        catch (Exception ex) {
            throw;
        }
    }
    private static void Bar()
    {
        throw new Exception("Error!");
    }
}