Imagine I am using a class to bring back items from a database, say
class BankRecord {
public int id;
public int balance;
public void GetOverdraft() {
...
The runtime does not duplicate the code when creating an instance of a object. Only the member fields are allocated space in memory when an instance is created. For this reason, you shouldn't be creating "data-only" classes unless you have some other design reason for doing so.
That being said, there are other best-practices reasons why you might not want a class with a multitude of methods (e.g. the God object anti-pattern).
No. In the CLR objects have a pointer to that type's meta information which includes everything necessary for reflection and the method table. The overhead for looking up a method implementation in the method table is the same regardless of the number of entries in the table. See this article for more information. In a nutshell all objects have 8 bytes of overhead (4 for the type handle and 4 for the syncblock).
However, what might be slower is reflection. It only makes since that if you want to enumerate through a type's metadata then it will be slower if there are more members declared in that type.