Apparently, using one call to integrate a double integral takes 14 times as long as calling integrate twice, and integrating to a function and subsequently evaluating that function at the limits is 32 times faster than giving the limits to Integrate.
If you reverse the order of the first two (and start with a fresh kernel), then the first one will take longer in about the same timing. Also if you run both of the first two again (without restarting the kernel), then they complete in about the same amount of time. And running it a second time improves the timing for all 3.
I ran it three times as you suggested, and indeed the first two take about the same time now. However, the third method (closed form with evaluation at the limits) remains about 50 times faster than providing the limits to Integrate (1.5 seconds when limits are given, 0.03 second when the function is generated and evaluated at the limits).