Lori Brown walks us through the sys.dm_sql_referencing_entities and referenced entities DMVs:
In both cases you can see that sys.sql_expression_dependencies provides the same basic info. But when it comes to tables are referenced by a stored procedure, sys.sql_expression_dependencies gives you less detail than you can get when using sys.dm_sql_referenced_entities. The biggest difference in both examples is that with sys.sql_expression_dependencies you will get info on cross-database and cross-server dependencies which can be super helpful.
However, once again I have to sound a note of caution because even sys.sql_expression_dependencies does not catch things referenced in a dynamic SQL string. Sales.Orders is found in dynamic SQL in the, [Application].[Configuration_EnableInMemory] & [DataLoadSimulation].[Configuration_ApplyDataLoadSimulationProcedures] stored procedures but it does not catch this. So far the best way to find objects in dynamic SQL strings that I know of is to check for the object in sys.sql_modules.
Read the whole thing.