This is SQL Server 2008 R2 running in Hyper-V virtual machine with 4 virtual cores.
Task Manager is reporting sqlservr.exe to use at least 50% CPU, sometimes 100% for minutes. I/O is very low. The top "Recent expensive queries" listed in Activity Monitor are reported in the range of 100 ms/s and pretty low figures for Logical Reads/s as well. Number of threads seems okay (around 180 for around 120 open connections, very few of them running).
Maintenance Plans are running normally: log backups every 15min, running only for a few seconds.
Any idea what could cause this high CPU load?
Update: It seems like I found the issue by analyzing a short unfiltered SQL trace. A stored procedure, repeatedly called by a background service, issued a SELECT statement suffering a typical "parameter sniffing" problem. After fixing this, CPU usage came down.
So I want to rephrase the question a bit: Is it normal, that stored procedures or the statements executed by stored procedures never show up in "Recent Expensive Queries"?
Chances are those statements where in there (at least if it was above certain metrics [See Below]) but the tool will show the statement only. It's up to the administrator to figure out the rest. It's a very minimal tool (activity monitor) that can be used to quickly glance and see how things are. Personally, I don't use it due to the minimalistic nature, though it is helpful when just wanting to spot check quickly.
To more address your question, there is a chance that the statements weren't in the "Recent Expensive Queries" section. Why? Below is the code used by SSMS to determine the information, as you can see there are hard coded values to what is a random guess at "expensive".
You'll be able to see different assumptions and filtering that is done. I can't say if your "query" is hitting these assumptions or is being filtered out, but this should give you some better insight into why it may not have shown up.
In the future I would use a resource such as Glenn Berry's Informational Diagnostics Scripts which are pre-written and work very well: https://sqlserverperformance.wordpress.com/2014/09/17/sql-server-diagnostic-information-queries-for-september-2014/