The solution was to remove fill=NA from the aes() call, since it's not an aesthetic (that is, it doesn't apply to a variable, it just applies to the entire map):
wind_map <- ggplot()+
geom_sf(data=shift_geometry(zip_geo), aes(fill=wind_group), color=NA)
+ geom_sf(data=shift_geometry(state_geo2), fill=NA, color="black")