Show different fields on node edit and node view depending on the sub-type of the node I have a specific node type that I want to show/hide different fields in the page layout for both the node form and when viewing the node.

For various reasons I don't want to have to create a new/separate Node type for each. Not sure how best to achieve this in Drupal 7?

There are actually two content types involved here. 'Open Calls' and 'Projects'

I have an idea submission system built in D7. Users login and browse through available 'Open Calls' for projects. 

Each call has a link to 'Apply Now'. This link takes users to the new node creation for a 'Project'. 

Each 'Project' has an entity reference field that is required that links the Project to the Open Call. This field is auto populated when they click the Apply Now button.

Ideally, I would be able to specify in the Open Call (rather than the project) what kind of project page layout they see when clicking the Apply Now link. 

I want to be able to post Open Calls for slightly different kinds of projects. For example an Open Call for artworks (paintings etc.), or alternatively an Open Call for performances. 

Clicking apply now on each of these should take the user to the New Project node creation screen with different fields for artworks / performances. (Some fields will appear on both).
Take a look at the Conditional Fields module. You could make some fields dependent on one checkbox selection and other fields dependent on a second checkbox selection. 


  Define dependencies between fields based on their states and values.
  
  Conditional Fields for Drupal 7 is an user interface to the new
  States API, plus the ability to modify fields appearance and
  behavior on certain conditions when viewing content.
  
  Description
  
  Conditional Fields allows you to manage sets of dependencies between
  fields. When a field is “dependent”, it will only be available for
  editing and displayed if the state of the “dependee” field matches the
  right condition. When editing a node (or any other entity type that
  supports fields, like users and categories), the dependent fields are
  dynamically modified with the States API.
  
  A simple use case would be defining a custom “Article teaser" field
  that is shown only if a "Has teaser" checkbox is checked, but much
  more complex options are available.