I think you want something like that:
SELECT `id`, `name`, IF(`is_private`, 'b', 'a') AS `orderBy`,
(SELECT `image_path` FROM `pin` WHERE `board_id` = `pin_board`.`id` ORDER BY `date_created` DESC LIMIT 1) AS `image_path`
`is_default` = 1
OR (`is_private` = 1 AND `user_id` = X)
ORDER BY `orderBy` ASC
I replaced your case statement with a simple IF function, which is in my opinion much cleaner in statements.
You further tried to combine the two tables twice. The first time by using the parent value inside the subselect. The second time with the help of a join. This does not make sense to me. I assumed you want all entries of pin_board and the newest corresponding pin-entry, which can be achieved for example with one subquery.