I recently fixed three rust spots on my 325; two were underneath fender wells (not visable) and one was dead center at the top of my windshield.
After getting a quote of over $600 PER SPOT to fix the three problems, I decided to tackle them myself first. I figured I could always pay the bucks to a body shop if my work was substandard.
The spot on top of the car ... I pulled away the gasket at the top of the windshield, used a Dremel tool (on low speed) and a fine sanding disc to remove every bit of rust - down to bare metal. I then applied three coats of primer (waiting the desired time between each one before applying the next coat), three coats of BMW paint, and four coats of clear coat, again waiting the desired time between each one. This process took about three hours total. Then I used rubbing compound a number of times to bring up the finish.
The only thing you can even see is a small dimple where the original paint was (as if I didn't put enough layers on it), but this dimple is ONLY noticable if you're looking hard for it.
It's been over three months now of rain and sun, and the spot looks as good as the day I did it.
Conforti chip, aFe CAI, Bilstein struts/shocks, H&R springs, Mason Engineering strut brace, Borla exhaust, BSW/Sony audio, TMS cross drilled rotors/Hawk HPS high performance street pads, BMW style 43 16" wheels with Bridgestone Potenza P960 tires and if you've read this entire signature just to see what I've done to my car then you need some serious professional help.
If you can't afford to do it right, you definitely can't afford to do it wrong.