Switch to using foreach loops:
#Outer loop
foreach ($VSAN_Key in $VSANTable.Keys)
{
#Inner loop
foreach ($WWPN_Key in ($WWPNTable.keys | Sort-Object) )
{
#Inner loop code
} #End inner loop
} #End Outer loop
then within the inner loop, the current VSANTable key will be $VSAN_Key, and the current WWPNTable key will be $WWPN_Key.
As far as using .keys or .getenumerator() and selecting the key names, you're safe using .keys as long as you're sure you won't ever have an entry that is named "keys". If it hits that, you'll get back the value of that table entry instead of the key collection. If it's possible you could get that as a key name, then stick with .getenumerator().