Проблема в том, что pic.onload это асинхронный код, а все ниже написано синхоронно. Соответственно нужно завернуть в callback, а лучше Promise.
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
function loadImage(src, cb){
var pic = new Image();
pic.onload = function(){
canvas.width = pic.width;
canvas.height = pic.height;
drawImage(pic, cb);
}
pic.crossOrigin = 'anonymous';
pic.src = src;
}
function drawImage(pic, cb){
context.drawImage(pic, 0, 0, pic.width, pic.height);
context.fillStyle = "black";
context.font = 'bold 30px sans-serif';
context.fillText("Autor Famyly", 290, 235);
cb();
}
function saveImage(dataURL) {
var a = document.createElement('a');
a.href = dataURL;
a.download = 'Certificate';
a.click();
};
loadImage('http://i.imgur.com/fHyEMsl.jpg', function(){
saveImage(canvas.toDataURL("image/png"));
});