Are 'SELECT *' Sub-Queries inefficient?
am I correct in assuming this would perform a full table scan in the sub queries, effectively reading more than actually necessary? 


No.  The query optimizer should see through this.  There's no general rule that subqueries are materialized in query execution.


  Am I also correct in assuming that the below would actually be more efficient? 


It may be that with enough joins and subqueries you could get a bad plan.  But it's not the first place to look.  Use the Query Store (SQL 2016+), or the plan cache DMVs, or XEvents to see the query plans and associated resource costs. 

For instance on AdventureWorksDW, these two queries use the same plan.

select p.Color, sum(f.SalesAmount) SalesAmount
from
 (select * from FactInternetSales) f
join
 (select * from DimProduct) p
 on p.ProductKey = f.ProductKey
 group by p.Color

 go

select p.Color, sum(f.SalesAmount) SalesAmount
from FactInternetSales f
join DimProduct p
 on p.ProductKey = f.ProductKey
group by p.Color