I personally prefer CoreDNS given its open nature (CNCF) and being written in Go but I'm a little biased :) There's probably a case to made for PowerDNS if you need to run something business critical on it and require support to be available with tight SLO. Also CoreDNS doesn't do recursive queries by default but there's an out-of-tree plugin wrapping libunbound[0] - its use-case is more of being a highly-configurable/programmable authoritative server.
[0] - https://coredns.io/explugins/unbound/