A few of the previously posted work-arounds seemed to work for some people but not all - just wanted to contribute what we found to be the issue in our case.
We are at 10.0.5 and while labels (not annotation as some have described) appeared to be confined to the data frame while in layout view, printing from ArcGIS and exporting to PDF resulted in the labels beyond the data frame. The issue was occurring only one when labeling one layer in particular and only when the data frame had a rotation applied.
After digging around in the Label Placement Properties dialog box, we found that having the "Never remove (allow overlap)" box checked on will cause the labels to go beyond the data frame. Again, this only happens when rotation is anything other than 0.
TL;DR - Uncheck this box.
[ATTACH=CONFIG]31241[/ATTACH]
Hope this helps.