You can do this with split/apply/combine:
spl = split(sample, sample$Population)
new.rows = lapply(spl, function(x) data.frame(Population=x$Population[1],
SampleSize=nrow(x),
PctComplete=sum(!is.na(x$End_Date))/nrow(x)))
combined = do.call(rbind, new.rows)
combined
# Population SampleSize PctComplete
# Glommen Glommen 13 0.6923077
# Kaseberga Kaseberga 7 1.0000000
# Steninge Steninge 15 0.8666667
One word of warning: sample
is the name of a base function, so you should pick a different name for your data frame.