SQL Server stores the data on disk in set and fixed fashion.
The order in sys.columns and key columns has no relevance to this on-disk order.
See “Anatomy of a record” (Paul Randal) and my answer here: How do you get to limits of 8060 bytes per row and 8000 per (varchar, nvarchar) value?