Respawn target after destroying returns error

I am using unity3d c# to respawn an object after destroying it at a specific position. The following code returns an error message:

Quarternion to matrix conversion failed because input quaternion is invalid

I get multiple spawns of the prefab a couple of seconds followed by the error message and they spawn all over the screen.

My codes as follows. For the variable respawn, I dragged and dropped the prefab from Unity itself. Thanks for any guidance.

Transform initialSpawn; 
    Transform respawn;
    public static bool dead = false;

    void Start()
    {
        initialSpawn = Instantiate(respawn, new Vector3(0,7,0), Quaternion.identity) as Transform;
        initialSpawn.parent = transform;
    }

void Update () {
        if (dead == true)
        {
            //The line below is the one giving the error
            initialSpawn = Instantiate(respawn, new Vector3(4, 7, 0), Quaternion.identity) as Transform; 


            initialSpawn.parent = transform;
            StartCoroutine(pauseBeforeReSpawn(2));
            dead = false;
            Debug.Log("test working");
        }

 void OnTriggerEnter(Collider c)
    {
       if(c.gameObject.name =="barrel" || c.gameObject.name == "ground") 
       {
         Destroy(initialSpawn); 
         dead = true;
       }
    }

    IEnumerator pauseBeforeReSpawn(int seconds)  
    {
        yield return new WaitForSeconds(seconds);
    }

using SetActive() instead of Instantiate/Destroy.

Public GameObject initialSpawn; // Changed
    Public GameObject respawn; // Changed
    public static bool dead = false;
     
    void Awake()
        {
            initialSpawn = Instantiate(respawn, new Vector3(0,7,0), Quaternion.identity) as GameObject; // Changed
            initialSpawn.transform.parent = transform;
        }
     
    void Update () {
            if (dead == true)
            {
    			StartCoroutine(pauseBeforeReSpawn(2f));
    			dead = false;
            }
     }
     
    void OnTriggerEnter(Collider c)
        {
           if(c.gameObject.name =="barrel" || c.gameObject.name == "ground") 
           {
             initialSpawn.SetActive(false); // Changed
             dead = true;
           }
        }
     
    IEnumerator pauseBeforeReSpawn(float seconds)  
        {
            yield return new WaitForSeconds(seconds);
    		initialSpawn.transform.position = new Vector3(4, 7, 0);
    		initialSpawn.SetActive(true); // Changed
    		yield return null;
        }