TL;DR
Create a PSCustomObject with the properties of your variables.
PowerShells output formatter uses the first object in the output set as a template for displaying subsequent objects in table format.
If the first object has properties A, B, and C those will be the table headers.
If the second object has only properties D, E, and F then a blank line will be shown.
You can see it for yourself with this example:
$TestResults = @()
$Test1 = [PSCustomObject]@{
Name = 'Test1'
Type = 'PSCustomObject'
}
$Test2 = [PSCustomObject]@{
Name = 'Test2'
Type = 'PSCustomObject'
}
$Test3 = [PSCustomObject]@{
Label = 'Test3' # <-- This is "Label", not "Name".
Type = 'PSCustomObject'
}
$TestResults += $Test1
$TestResults += $Test2
$TestResults += $Test3
# Show output:
$TestResults

Option 1 - Calculated Properties (Wouldn't recommend in your scenario):
So, you could rename the properties in your variables to have the same name using calculated properties?
$Test3 | Select-Object @{ Name = 'Name'; Expression = { $_.Label }}, Type

Then when you add this to your array, all the values should show:
$TestResult_02 = @()
$TestResult_02 += $Test1
$TestResult_02 += $Test2
$TestResult_02 += $Test3 | Select-Object @{ Name = 'Name'; Expression = { $_.Label }}, Type
$TestResult_02

Why not this method for your scenario?
All your properties mean separate things.
The Architecture property of $OSInfo doesn't match up with any property of $DiskSpace for example.
Using calculated properties here would likely end up confusing everyone in time.
Option 2 - Creating a PSCustomObject (Would recommend)
It's easy to build up a PSCustomObject type, especially if you know the output of commands or variables in advance as you do in your scenario.
$ResultObject = [PSCustomObject]@{
Test1_Name = $Test1.Name
Test1_Type = $Test1.Type
Test2_Name = $Test2.Name
Test2_Type = $Test2.Type
Test3_Name = $Test3.Label
Test3_Type = $Test3.Type
}
$ResultObject

Using your examples with the information on my machine, we can create the following PSCustomObject
$FullResults = [PSCustomObject]@{
ComputerName = $OSInfo.ComputerName
OSVersion = $OSInfo.OSVersion
Version = $OSInfo.Version
Architecture = $OSInfo.Architecture
InstanceName = $SQLInstanceInfo.DbaInstanceName
Edition = $SQLInstanceInfo.Edition
NetPort = $SQLInstanceInfo.NetPort
IsClustered = $SQLInstanceInfo.IsClustered
Processors = $SQLInstanceInfo.Processors
ProductLevel = $SQLInstanceInfo.ProductLevel
ServiceName = $SQLInstanceInfo.ServiceName
Disks = $DiskSPace
}
$FullResults
