Can I determine if a stored procedure uses dynamic sql without parsing the definition?
No. There is no flag or metadata about "UsesDynamicSQL"

You have to search the definition...

There are 2 ways to execute dynamic SQL


sp_executesql
EXEC (.. or EXECUTE ('


You can search for the first in sys.sql_modules, the 2nd using LIKE

WHERE
   REPLACE(definition, ' ', '') LIKE '%EXEC(%'
   OR
   REPLACE(definition, ' ', '') LIKE '%EXECUTE(%'
   OR
   definition LIKE '%sp[_]executesql%'