How to fix viewport being tilted on startup?
The 3d view's view_rotation
This is purely an arbitrary choice in the default startup file. Edit and save the startup file if any are not to your liking.
Instead of aligning a camera to view, can get the view matrix of the 3d view.
For example, looking at the 3d view rotation of the 3d viewport in General Workspace.
&gt;&gt;&gt; s = D.workspaces['General'].screens[0].areas[3].spaces.active

&gt;&gt;&gt; list(map(degrees, s.region_3d.view_rotation.to_euler()))
[63.52429048891948, 0.7600397052594825, 65.79110050085248]

showing the 0.76 degrees result for y Euler rotation.  Like a camera the view looks down its local Z axis.
Test script to change all 3d views in all workspaces to have a zero euler rotation y component.
import bpy

context = bpy.context

for ws in bpy.data.workspaces:
    for screen in ws.screens:
        for area in screen.areas:
            if area.type == 'VIEW_3D':
                r3d = area.spaces.active.region_3d
                eul = r3d.view_rotation.to_euler()
                eul.y = 0
                r3d.view_rotation = eul.to_quaternion()

Result of above after running script
&gt;&gt;&gt; list(map(degrees, s.region_3d.view_rotation.to_euler()))
[63.52429048891948, -9.830594791652178e-07, 65.79110050085248]

(y rot value is -0.000000983 which can be considered zero within blenders tolerance limit)
To make these permanent, open new file, paste script in text editor, run script, (unlink after running to not save script) then save startup file. File &gt; Defaults &gt; Save Startup File Now any new file will reflect this change.
For other templates would need to open and edit the blend file associated with the template [look for link].