Score and Collision Problem

I’m making a race game and want to count score when a car is entering a gate. It must counts by adding 1 , but when I enter the gate it counts by adding 3. Also I want to make the game restarting when the car hit a collider and showing a text, but it doesn’t detect a collision. Here is my code.

using UnityEngine;
using System.Collections;

public class BodyColliderScript : MonoBehaviour {

Rigidbody attachedRigidbody;
int intLevel;
public GuiManager guiManager;

void Start()
{
    intLevel = 0;
    guiManager.levelLbl.text = string.Format("Level : {0}", intLevel.ToString());
    attachedRigidbody = GetComponent<Rigidbody>();
}
void OnTriggerEnter(Collider col)
{
    if(col.tag=="Gate")
    {
        intLevel += 1;
        guiManager.levelLbl.text = string.Format("Level : {0}", intLevel.ToString());
    }
}
void OnCollisionEnter(Collision col)
{
    if (col.gameObject.name == "Road")
    {
        Debug.Log("Collision");
        guiManager.ShowDeadText();
    }
}

}

Problem #1

So the reason why the score is increasing by 3 is because the car is staying in contact with the trigger for 3 frames (depends on the size of the trigger and the car). What you need is something like a plane or some invisible object you need to detect collision with, increase the score and destroy it immediately, otherwise the number of frames the car will be in contact with the object the score will keep on increasing.

Problem #2

From what i know a collider cannot act as a trigger and a collider at the same time. You might need another collider if you want to work with what you have.

What i would recommend

is have one collider on the object, have another collider on an invisible plane (tag it something), detect collision with this plane, increase the score and destroy the plane. And for the restarting the level have another game object (tag it something as well), detect collision with it and restart the level !!