SDK: Weird StateUpgraders behavior in v1 SDK

Hello all,
I have added an attribute to a resource that is TypeString, Optional, with Default value, and ForceNew. When I try to plan with a resource that was created before this attribute was added, I see Terraform wants to force recreation because the attribute is added and is triggering the ForceNew condition. I want to write a StateUpgrader that will fill in the Default value and avoiding this ForceNew recreation behavior. However, it is not working as expected and perhaps someone could point me in the right direction.
Here is the relevant code, ‘tunnel_protocol’ is the new attribute that I want to set in the State Upgrader.

func resourceV0() *schema.Resource {
	return &schema.Resource{
		Schema: map[string]*schema.Schema{
			"vpc_id": {
				Type:     schema.TypeString,
				Required: true,
			},
			"tunnel_protocol": {
				Type:     schema.TypeString,
				Optional: true,
			},
		},
	}
}

func resourceUpgradeV0(rawState map[string]interface{}, meta interface{}) (map[string]interface{}, error) {
	rawState["tunnel_protocol"] = "IPsec"
	return rawState, nil
}
		SchemaVersion: 1,
		StateUpgraders: []schema.StateUpgrader{
			{
				Type:    resourceV0().CoreConfigSchema().ImpliedType(),
				Upgrade: resourceUpgradeV0,
				Version: 0,
			},
		},

I expected tunnel_protocol to be set into state with the value “IPsec” after running terraform refresh. The actual behavior was tunnel_protocol was set into state with the empty string.
TF version: 0.14.2