1.) Код получается намного оптимальнее, на мой взгляд
2.) API намного проще и чище
3.) SPL по-хорошему свой на каждое семейство МК, бывает в обновлениях присутствуют весьма радикальные изменения структуры, доступен в виде zip. OpenCM3 очень легко обновляется с гитхаба, со всеми вытекающими плюшками сразу для всех семейтв + поддерживает несколько контроллеров от NXP и других вендоров
4.) HAL штука интересная, но дает еще больший overhead, чем SPL.
5.) Если привык использовать GNU-toolchain, HAL и SPL нужно обрабатывать напильником. OpenCM3 просто работает (подозреваю, что обратное тоже верно - если работаешь на IAR, вероятно, OpenCM3 не будет уже так хорош)