The "L" flag does mean "last" and that is relation to that specific chain of rewrites (as you can have rewrites be for specific Rewrite Conditions).
So given the original rewrite rules:
RewriteBase /
RewriteRule m/(.*)/(.*)/(.*)$ modules/$1/$2/$3 [L]
RewriteRule m/(.*)/(.*)/image/(.*)$ modules/$1/$2/image/$3 [L]
The url domain.com/m/test1/4/style.css it would match the first RewriteRule because between the "m" and the end of the url, there are only 3 path separators ("/"). So that url would be rewritten to: modules/test1/4/style.css.
Given a similar url: domain.com/m/test1/4/image/logo.png the first RewriteRule would not match because between the "m" and the end of the url, there are in fact 4 path separators. So it falls through to the next RewriteRule which does match since the 4[sup]th[/sup] part of the url is the word "image". So then that rule is applied and it's rewritten to: modules/test1/4/image/logo.jpg.
Since both are flagged with "L", then rule processing stops.
Hope that helps clarify things.