I've been playing with text-placement, but "interior" seems to only be for when the center of the polygon is not within the polygon. Is there a text-placement method that accounts for the size of the label and doesn't place the label when the text is too big for the polygon?
Right interior only changes placement location with polygons (it is equivalent to postgis's "point on surface"). There is minimum-path-length (called text-min-path-length in CartoCSS) that will hold back labels for small features. So minimum-path-length="10" would skip labeling lines that are not more than 10 pixels long and polygon whose bbox width (in screen pixels) is not more than 10 pixels wide.
The behavior you describe of skipping labeling when the text does not fit within the feature is actually the default behavior for placement=line, but we'ver never consider making it so for placement=point|interior. That is a good idea.
just confirmed that minimum-path-length should kick in for polygons here: https://github.com/mapnik/mapnik/blob/master/src/symbolizer_helpers.cpp#L181-188