I modified your MWE a bit to make it easier for me to see what was going on (and you can feel free to use this in your bug submission).
x <- c(0, 0, 1, 1)
y <- c(0, 1, 0, 1)
f1 <- c("a", "a", "b", "b")
f2 <- c("c", "d", "c", "d")
F1 <- factor(f1)
F2 <- factor(f2)
F11 <- factor(f1, levels = c("b", "a"))
F22 <- factor(f2, levels = c("d", "c"))
df <- data.frame(x, y, F1, F2, F11, F22)
qplot(x, y, facets = F1 ~ F2) # correct
ggplot(df, aes(x, y)) + geom_point(color = "red", size = 4) + facet_grid(F1 ~ F2) # correct
qplot(x, y, facets = F11 ~ F22) # wrong
ggplot(df, aes(x, y)) + geom_point(color = "blue", size = 4) + facet_grid(F11 ~ F22) # correct
qplot(x, y, facets = F11 ~ F22, data = df) # correct
So, I woud say either use ggplot or qplot by passing in the data parameter directly.
If we do:
> data <- data.frame(x,y,f1,f2,f11,f22)
> ggplot(data, aes(x,y)) + geom_point() + facet_grid(f1 ~ f2)
> ggplot(data, aes(x,y)) + geom_point() + facet_grid(f11 ~ f22)
They generate two consistent charts, just grid scales/labels were switched around.
However,