It looks like ggplot2::geom_polygon acts differently running Windows vs. OSX. Here's an example:
library("ggplot2")
df <- data.frame(x = c(1, 4, 4, 1, 1, 2, 3, 3, 2, 2, 1),
y = c(2,2, 5, 5, 2, 3, 3, 4, 4, 3, 2),
hole = c(FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE))
ggplot(data=df) + geom_polygon(mapping=aes(x, y), fill="green")
Here's what this produces for me on Windows:

...and on my Mac:

It's maybe a bit confusing what behavior should be expected in the above example! Tracing the hole in the negative direction is more sensible, and gets consistent behavior (both like the Windows output above):
index <- 1:nrow(df)
index[df$hole] <- rev(index[df$hole])
dfReversed <- df[index,]
ggplot(data=dfReversed) + geom_polygon(mapping=aes(x, y), fill="green")
I'm using the same version of R and Ggplot2 for both:
Windows 8 OS X 10.9.1 R v3.0.2 Ggplot2 v0.9.3.1.
What causes this difference? Or more generally, how does geom_polyon decide what to draw in such confusing examples?