Is there a way to make the DPI always sync depending on which screen I am using?
While an addon can create an operator that can change the DPI setting, it cannot access or change the current setting while blender is registering the addon.

Once the addon has been registered the operator can change the DPI for you. An operator can be assigned to a button or a keyboard shortcut for you to use. My thought is adding a button to the top left of the info header will always be visible and will let you quickly toggle between two specific DPI settings.



Save the following to a text file and use Install from File in your preferences. You can then enable the addon and Save User Settings so that is always available. The two dpi settings can be adjusted to taste.

bl_info = {
    "name": "Set DPI",
    "author": "sambler",
    "version": (1, 0),
    "blender": (2, 75, 0),
    "location": "Info header",
    "description": "Toggle between two DPI settings",
    "category": "System",
    }

import bpy

low_res_dpi = 72
hi_res_dpi = 120

class SetDPI(bpy.types.Operator):
    bl_idname = 'wm.set_dpi'
    bl_label = 'Toggle dpi setting'

    def execute(self, context):
        syspref = context.user_preferences.system
        if syspref.dpi &lt;= low_res_dpi:
            syspref.dpi = hi_res_dpi
        else:
            syspref.dpi = low_res_dpi
        return {'FINISHED'}

def SetDPI_menu(self, context):
    if context.user_preferences.system.dpi &lt;= low_res_dpi:
        i = 'FULLSCREEN_ENTER'
    else:
        i = 'FULLSCREEN_EXIT'
    self.layout.operator( SetDPI.bl_idname, text="", icon=i )

def register():
    bpy.utils.register_class(SetDPI)
    bpy.types.INFO_HT_header.prepend(SetDPI_menu)

def unregister():
    bpy.utils.unregister_class(SetDPI)
    bpy.types.INFO_HT_header.remove(SetDPI_menu)

if __name__ == "__main__":
    register()