I just ran into this. On iOS 7 it seems that CGContextSetRGBFillColor is used in place of CGContextSetRGBStrokeColor for setting the stroke color. Looks like a bug. This means that there is no way to use CGContextSetTextDrawingMode(context, kCGTextFillStroke); because the stroke color will be the same as the fill color.
I modified your code to work by adding a second drawInRect call. This solution is also backward compatible since it just re-strokes the stroke an extra time and should also be forward compatible if they fix the bug:
UIGraphicsBeginImageContext(CGSizeMake(scale(line.position.width), scale(line.position.height)));
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth (context, scale(4.0)); //4.0
CGContextSetLineJoin(context, kCGLineJoinRound);
CGContextSetBlendMode(context, kCGBlendModeScreen);
CGContextSetTextDrawingMode(context, kCGTextFillStroke);
CGContextSetRGBFillColor(context, 1.0, 1.0, 1.0, 1.0);
CGContextSetRGBStrokeColor(context, 0.0, 0.0, 0.0, 1.0);
[label.text drawInRect:label.frame withFont:label.font];
//New Code Start
CGContextSetTextDrawingMode(context, kCGTextStroke);
CGContextSetRGBFillColor(context, 0.0, 0.0, 0.0, 1.0);
[label.text drawInRect:label.frame withFont:label.font];
//New Code End
self.image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();