Is it possible to set attribute defaults in a list of objects?

Yes, I found out after posting above that currently it gave ALL the instances the “DBSubnet” instead of the “DefaultSubnet”
After setting it as you suggested, it worked correctly - and I was able to get rid of the default block entirely.

variable "instances" {
    type = list(object({
        name = string
        type = string
        subnet = optional(string, "defaultsubnet")
    }))
}