@Gianluca - MaxCellMeasure -> 0.01 is not small enough. 0.005 provides much better results. I didn't encounter crashes for years using regions. What system do you use (I use Mac Pro and MacBook Pro by Apple).
@Anthony - you could think of several options to tackle this issue.
First, the graphical representation on the screen has nothing to do with the real accuracy achieved by Region, since graphical representation is ALWAYS discretized.
You could achieve a better behavior from the default Region by replacing all the approximate numbers with accurate ones, i.e., change all floating point numbers to rationals. This will improve the resolution at the wider part.
Second, if the thickness is of no importance and speed is an issue, you could use (for both exact and approximate versions...)
BoundaryDiscretizeRegion[df, MaxCellMeasure -> 0.005]
which is a little bit more memory efficient than
DiscretizeRegion[df, MaxCellMeasure -> 0.005]
In your case, I would use discretization as late as possible in my computations to speed it up.
HTH
yehuda