I am having the same problem on a few of my sites, and I'm wondering if the issue is technical.
For as long as I can remember I've 301 redirected my non-www addresses to the www. equivalent... the 301 is functioning perfectly, checked in multiple online checkers and chrome's about:net-internals tool.
About 6 months ago I also added the canonical tag on all pages referring to the www. page... but still google presents the non-www version of the page in search results.
I'm not sure what else I can do to get google to actually recognize that I've never wanted the non-www url to appear.
Not sure if it's related, but the 301's are handled by a separate server than the main site is hosted from, so technically the non-www and www. domain resolve to different IPs... would this affect anything?
I have plenty of links to the www. version... so really not sure what else it could be!