(See the best response by DarkCampainger.)
I'm not sure what is going on here, and I feel like it may just be me forgetting something, but I have this in my map file:

But when I run it, it shows this:

Any clues as to why? As for the code, it's extremely simple definitions:
icon = '\icons/Grass.dmi'

bare {icon_state = "bare"}

top_left {icon_state = "light_top_left"}

top_right {icon_state = "light_top_right"}

top {icon_state = "light_top"}

bot_left {icon_state = "light_bot_left"}

bot_right {icon_state = "light_bot_right"}

bot {icon_state = "light_bot"}

left {icon_state = "light_left"}

right {icon_state = "light_right"}

icon_state = "dark"

top_left {icon_state = "dark_top_left"}

top_right {icon_state = "dark_top_right"}

top {icon_state = "dark_top"}

bot_left {icon_state = "dark_bot_left"}

bot_right {icon_state = "dark_bot_right"}

bot {icon_state = "dark_bot"}

left {icon_state = "dark_left"}

right {icon_state = "dark_right"}

So yeah, I don't think it is a code issue.

Can turfs not overlay by using Shift+Click anymore?
Is the lighter grass in that picture /turf, or /turf/grass/light/bare? If the former (or /turf/grass, or /turf/grass/light) then when it's being added as an underlay, it's inheriting the icon_state of its parent (because its icon_state is null). You could fix it by giving your default state a name.
It's just /turf/grass. There is an unnamed state in the 'Grass.dmi' though, which is what is used all the way down to /turf.
In response to Albro1
Best response
Yea, then you need to give that state a name, or whenever it's used in an underlay it'll switch to match the parent's icon_state.
In response to DarkCampainger
I still have no clue why changing the name works, but ok lol. It worked, thanks DC.
In response to Albro1
When you add an overlay or underlay to an atom, it will inherit its icon, icon_state, dir, and flick animations from the parent if they aren't already set. So since the /turf/grass had an empty icon_state, it was inheriting the value from its parent (the dark grass edges) effectively making it look like it was missing. Giving the default state a name means that the grass will no longer inherit its icon_state from the parent, because it's no longer null.