Just to clear up some confusion...
An interface cannot have fields.
However, it can have properties. Properties that would invariably have to be implemented through code by the objects that implement the interface.
Unless you plan on casting a reference to an object through an interface back to a concrete type, you should put some properties that makes sense into the interface, otherwise you won't be able to reach them.
In other words, if you have this:
IVehicle vehicle = GetVehicle();
// want to get speed of vehicle?
Car car = (Car)vehicle;
Double speed = car.Speed;
Common properties should be put into the common interface. Since a vehicle is a moving object, speed would make sense to have there.
However, the number of engines would make sense for planes and some boats, but not for cars, and such that type of information would probably have to be located into some more specific interfaces.
Static would mean shared between instances, I doubt that would be a good idea.
However, the overall plan to use interfaces instead of just a class hierarchy to separate out the access to and use of an object from its actual type and identity is a good idea, and leads to good design.
The best plan is to pick the level of abstraction that makes sense for your model and go with that. You can over-design such a solution very easily. For instance, you could realize that some vehicles doesn't have engines at all, and some can move in more than one dimension (ie. not just forward/backward, but up/down, sideways, etc.), and picking the level that fits your model is a good start.
For instance, if you're going to model the transportation issues a county has to deal with, whether a plane can move just forward/backward or got vertical rotatable engines or not is moot, so you probably shouldn't try to design that into the solution.