My solution was to force an intermediate result so that there is a break between SQL and XML queries. My code for LinqPad is as follows.
var all = from bm in mytable
select new { name=bm.SPP_USER_ID, xml=(string)bm.SPP_BOOKMARKS_XML};
var docs = from x in all
select XDocument.Parse(x.xml);
var docs2 = docs.ToList(); // FORCE RESULT
XNamespace ns = "http://acme/bookmarks";
var href = from h in docs2.Descendants(ns + "href")
select h.Value;