I would define a new column with a category for Not Significant along with neg and pos and then set the colors manually.
estimate<-c(-1.5,2.5, 1.8)
est.dir<-c("neg","pos", "pos")
p.value<-c(0.001,0.1, 0.02)
lat<-c(62,68, 66)
long<-c(22,28, 24)
df<-data.frame(estimate,est.dir,p.value,lat,long)
df$est.dir2 <- ifelse(p.value <= 0.05, est.dir, "NS")
#make scatterplot
library(ggplot2)
ggplot(data=df,
aes(x=long,y=lat,size=estimate^2,colour=est.dir2))+
geom_point() +
scale_color_manual(values = c("neg" = "red", "pos" = "blue", "NS" = "gray"))