I think these ideas work... a bit "brute force" and note using sub-queries is not the most performant (but it's a starting point :-) )
To get the steps for the most recent communication log entry:
select pkCustomer, strCustomerName, pkCommunicationLog, pkCommunicationLogStep, strCommunicationLogStep
from #tblCustomers C
left join #tblCommunicationsLogs L ON L.fkCustomer = c.pkCustomer
left join #tblCommunicationLogSteps S on S.fkCommunicationLog = L.pkCommunicationLog
inner join (SELECT MAX(pkCommunicationLog) as m, fkCustomer FROM #tblCommunicationsLogs GROUP BY fkCustomer) as fltr ON fltr.m=L.pkCommunicationLog
ORDER BY pkCommunicationLog,pkCommunicationLogStep
To get just the most recent log step by customer
select pkCustomer, strCustomerName, pkCommunicationLog, pkCommunicationLogStep, strCommunicationLogStep
from #tblCustomers C
left join #tblCommunicationsLogs L ON L.fkCustomer = c.pkCustomer
left join #tblCommunicationLogSteps S on S.fkCommunicationLog = L.pkCommunicationLog
inner join (SELECT MAX(pkCommunicationLogStep) as m, fkCommunicationLog FROM #tblCommunicationLogSteps GROUP BY fkCommunicationLog) as fltr ON fltr.m=S.pkCommunicationLogStep AND fltr.fkCommunicationLog = S.fkCommunicationLog
ORDER BY pkCommunicationLog,pkCommunicationLogStep